vim中有多个自动命令

时间:2009-09-11 21:07:57

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

3 个答案:

答案 0 :(得分:66)

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

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

答案 1 :(得分:50)

您可以使用|链接大多数命令:

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

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

另请参阅:h line-continuation,了解行开头\的奇怪语法。

答案 2 :(得分:21)

ftplugins是你问题的巧妙答案。

  1. 确保.vimrc有一行:filetype plugin on
  2. 定义名为{rtp}/ftplugin/{thefiletype}.vim{rtp}/ftplugin/{thefiletype}/whatever.vim的文件(有关详情,请参阅:h rtp)。
  3. 编辑此新文件并将您的VIM命令放在那里。使用:setlocal命令确保仅针对该文件的文件类型特定设置(例如,不要在所有文件类型中将所有注释变为紫色)可能是个好主意。
  4. 如果您计划覆盖默认设置,请参阅vim发行版中的示例;或者在many ftplugins I wrote之内,只需写下您的:setlocal:*map <buffer>等定义。

    它代表了更多的行类型,但至少,它确实可以扩展。