【问题标题】:How to set an option, using let, for the current buffer (vim)?如何使用 let 为当前缓冲区(vim)设置一个选项?
【发布时间】:2013-01-25 21:26:42
【问题描述】:

在 vimla​​nguage 中,您只能使用 setlocal 为当前缓冲区设置选项。 但是,我需要设置一个比文字更复杂的表达式,而 setlocal 无法做到这一点。

我目前有let &formatprg=s:prgpath." ".a:args,但这为所有缓冲区设置了格式prg,这不是我想要的。 我如何像上面一样设置 formatprg,只针对当前缓冲区?

【问题讨论】:

    标签: vim


    【解决方案1】:

    使用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 也不行。
    • 啊,这就解释了!不过这很奇怪。我需要在本地设置 formatprg,因为我想为不同的文件类型使用不同的 formatprg。
    • 本地的 formatexpr 是否适用于您的情况?如果没有,您可以设置一个autocmd 来更改BufRead,BufEnter 上的formatprg 以获取特定的文件类型。
    【解决方案2】:

    创建全局选项 buffer-local 需要更改 Vim 的源代码。或者,我刚刚发布了 GlobalOptions plugin,它使用 autocmds 来解决这个问题,并将任何全局选项转换为缓冲区或窗口本地选项。

    【讨论】:

    猜你喜欢
    • 2010-09-11
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    相关资源
    最近更新 更多