Vim 中的多个自动命令

我的 .vimrc中有一些部分是这样的:

autocmd Filetype ruby setlocal ts=2
autocmd Filetype ruby setlocal sts=2
autocmd Filetype ruby setlocal sw=2

现在看来我可以把它们转换成这样:

autocmd Filetype ruby setlocal ts=2 sts=2 sw=2

但是我的问题是: 有没有一种 Vim 的方式来建造这样的结构?

<something mentioning Filetype ruby>
setlocal ts=2
setlocal sts=2
...
<end>

也就是说,autocmd Filetype位能以某种方式处理一组动作吗?(这是一个简单的例子,我真的要求更复杂的情况。)

28299 次浏览

如果愿意,可以调用函数:

autocmd Filetype ruby call SetRubyOptions()
function SetRubyOptions()
setlocal ts=2
...
endfunction

你可以用 |连接大多数命令:

au Filetype ruby
\ setlocal ts=2  |
\ setlocal sts=2 |
\ ...

不确定这种语法是否比编写函数更好。有些命令不能像这样链接,但是您可以使用 execute来解决这个问题; 请参阅 :h :bar

也请参阅 :h line-continuation,了解行首 \的奇怪语法的解释。

Ftplugins 是对你问题的简洁回答。

  1. 确保你的 .vimrc有一条线,比如 :filetype plugin on
  2. 定义一个名为 {rtp}/ftplugin/{thefiletype}.vim{rtp}/ftplugin/{thefiletype}/whatever.vim的文件(有关详细信息,请参阅 :h rtp)。
  3. 编辑这个新文件并将您的 VIM 命令放入其中。使用 :setlocal命令确保文件类型特定的设置只针对该文件(例如,不要在所有文件类型中将所有注释都变成紫色)可能是一个好主意。

如果您计划覆盖默认设置,或者在 我写了很多 ftplugins中,请参见 vim 发行版中的示例) ,只需写下您的 :setlocal:*map <buffer>等定义。

它代表更多的行类型,但至少,它的规模。