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位可以以某种方式解决一组操作? (这是一个简单的例子,我真的要求更复杂的情况。)

你可以调用一个函数,如果你喜欢:

 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命令可能是一个好主意,以确保文件types特定的设置仅适用于该文件(例如,不要在所有文件types中closures所有注释)。

如果您打算覆盖默认设置,请参阅vim分发中的示例; 或者在我写的许多ftplugins中 ),只要写下你的:setlocal:*map <buffer>等定义。

它代表了更多的行types,但至less,它确实规模。