vim中有多个自动命令

Pet*_*ter 56 vim

我的一些部分.vimrc看起来像这样:

autocmd Filetype ruby setlocal ts=2
autocmd Filetype ruby setlocal sts=2
autocmd Filetype ruby setlocal sw=2
Run Code Online (Sandbox Code Playgroud)

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

autocmd Filetype ruby setlocal ts=2 sts=2 sw=2
Run Code Online (Sandbox Code Playgroud)

但这是我的问题:有没有像这样的结构的vim方式?

<something mentioning Filetype ruby>
  setlocal ts=2
  setlocal sts=2
  ...
<end>
Run Code Online (Sandbox Code Playgroud)

也就是说,autocmd Filetype某种程度上可以用来解决一组行动?(这是一个简单的例子,我真的要求更复杂的情况.)

Luc*_*man 70

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

autocmd Filetype ruby call SetRubyOptions()
function SetRubyOptions()
    setlocal ts=2
    ...
endfunction
Run Code Online (Sandbox Code Playgroud)

  • 虽然它很好,但是vim脚本没有lambdas:P (9认同)
  • 来自未来的 Cominatcha:Vim 8.0 有 lambdas。 (7认同)

Bri*_*per 54

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

au Filetype ruby
            \ setlocal ts=2  |
            \ setlocal sts=2 |
            \ ...
Run Code Online (Sandbox Code Playgroud)

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

另请参阅行开头:h line-continuation的奇怪语法解释\.


Luc*_*tte 21

ftplugins是你问题的巧妙答案.

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

如果您计划覆盖默认设置,请参阅vim发行版中的示例; 或者其中许多ftplugins我写的其他方式),只写下来你的:setlocal,:*map <buffer>等定义.

它代表了更多的线型,但至少,它确实可以扩展.

  • 与单个单片.vimrc相比,ftplugins可以更容易地分发和共享.当配置变得丰富和复杂时,我们无法将所有内容保存到一个文件中(请参阅我的C++套件 - 我对其他语言有类似且更简单的配置).顺便说一句,我没有十几个(非标准的)ftplugins,但是78.而且我只有9个我没有维护.我很高兴我的.vimrc中没有他们的定义.而且,在各种计算机之间复制一个配置就像调用find + xarg + tar一样简单. (2认同)