我的.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
位可以以某种方式解决一组动作吗? (这是一个简单的例子,我真的要求更复杂的情况。)
答案 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是你问题的巧妙答案。
.vimrc
有一行:filetype plugin on
{rtp}/ftplugin/{thefiletype}.vim
或{rtp}/ftplugin/{thefiletype}/whatever.vim
的文件(有关详情,请参阅:h rtp
)。:setlocal
命令确保仅针对该文件的文件类型特定设置(例如,不要在所有文件类型中将所有注释变为紫色)可能是个好主意。如果您计划覆盖默认设置,请参阅vim发行版中的示例;或者在many ftplugins I wrote之内,只需写下您的:setlocal
,:*map <buffer>
等定义。
它代表了更多的行类型,但至少,它确实可以扩展。