【发布时间】:2013-01-25 21:26:42
【问题描述】:
在 vimlanguage 中,您只能使用 setlocal 为当前缓冲区设置选项。
但是,我需要设置一个比文字更复杂的表达式,而 setlocal 无法做到这一点。
我目前有let &formatprg=s:prgpath." ".a:args,但这为所有缓冲区设置了格式prg,这不是我想要的。
我如何像上面一样设置 formatprg,只针对当前缓冲区?
【问题讨论】:
标签: vim
在 vimlanguage 中,您只能使用 setlocal 为当前缓冲区设置选项。
但是,我需要设置一个比文字更复杂的表达式,而 setlocal 无法做到这一点。
我目前有let &formatprg=s:prgpath." ".a:args,但这为所有缓冲区设置了格式prg,这不是我想要的。
我如何像上面一样设置 formatprg,只针对当前缓冲区?
【问题讨论】:
标签: vim
使用let &l:option 而不是let &option 仅更改本地值,例如setlocal option。同样,let &g:option 只会设置全局值,如setglobal option。请参阅:help :let-option 了解更多信息。
请注意,formatprg 尤其是全局的(its help 中没有“本地缓冲区”)。
【讨论】:
let &l:formatprg="hey" 时,另一个窗口中的&l:formatprg 也会更改。
formatprg 是全局唯一的; setlocal 也不行。
formatexpr 是否适用于您的情况?如果没有,您可以设置一个autocmd 来更改BufRead,BufEnter 上的formatprg 以获取特定的文件类型。
创建全局选项 buffer-local 需要更改 Vim 的源代码。或者,我刚刚发布了 GlobalOptions plugin,它使用 autocmds 来解决这个问题,并将任何全局选项转换为缓冲区或窗口本地选项。
【讨论】: