如何使用let为当前缓冲区(vim)设置选项?

如何使用let为当前缓冲区(vim)设置选项?,vim,Vim,在vimlanguage中,只能使用setlocal设置当前缓冲区的选项。 但是,我需要设置一个比文字更复杂的表达式,这在setlocal中是不可能的 我目前有let&formatprg=s:prgpath。“.a:args,但这设置了所有缓冲区的formatprg,这不是我想要的。 如何设置上述格式,仅针对当前缓冲区?使用let&l:option而不是let&option仅更改本地值,如setlocal option。类似地,let&g:option只设置全局值,如setglobal opti

在vimlanguage中,只能使用
setlocal
设置当前缓冲区的选项。 但是,我需要设置一个比文字更复杂的表达式,这在
setlocal
中是不可能的

我目前有
let&formatprg=s:prgpath。“.a:args
,但这设置了所有缓冲区的formatprg,这不是我想要的。
如何设置上述格式,仅针对当前缓冲区?

使用
let&l:option
而不是
let&option
仅更改本地值,如
setlocal option
。类似地,
let&g:option
只设置全局值,如
setglobal option
。有关更多信息,请参阅


请注意,
formatprg
尤其是全局的(中没有“本地到缓冲区”。

使全局选项缓冲区为本地需要更改Vim的源代码。或者,我刚刚发布了使用autocmds解决此问题的,并将任何全局选项转换为缓冲区或窗口本地选项。

它似乎不起作用。当我打开两个窗口并运行
let&l:formatprg=“hey”
时,另一个窗口中的
&l:formatprg
也会发生更改。这是因为
formatprg
是全局的
setlocal
对它也不起作用。啊,这就解释了!不过很奇怪。我需要在本地设置formatprg,因为我想对不同的文件类型使用不同的formatprg。本地的
formatexpr
,在您的情况下有效吗?如果没有,您可以在
BufRead,BufEnter
上设置一个
autocmd
来更改特定文件类型的
formatprg
。谢谢您的建议!我在vim dev的邮件列表中找到一篇帖子,它请求对此进行修补:。我认为在下一个版本的vim中使formatprg本地化不会有什么坏处。