代码之家  ›  专栏  ›  技术社区  ›  Peter

VIM中的多个自动命令

vim
  •  49
  • Peter  · 技术社区  · 15 年前

    我有一些部分在我的 .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>
    

    可以,IE autocmd Filetype 不知怎的,为了解决一组行动?(这是一个简单的例子,我要求的是更复杂的情况。)

    3 回复  |  直到 10 年前
        1
  •  64
  •   Lucas Oman    15 年前

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

    autocmd Filetype ruby call SetRubyOptions()
    function SetRubyOptions()
        setlocal ts=2
        ...
    endfunction
    
        2
  •  47
  •   Shahbaz Martin York    11 年前

    您可以使用 | :

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

    不确定此语法是否比编写函数更好或更差。有些命令不能像这样链接,但您可以使用 execute 绕过那个;看 :h :bar .

    另请参见 :h line-continuation 为了解释这个奇怪的语法 \ 在行首。

        3
  •  21
  •   Luc Hermitte    10 年前

    ftplugins是您问题的完美答案。

    1. 确保你 .vimrc 有一行,如 :filetype plugin on
    2. 定义名为的文件 {rtp}/ftplugin/{thefiletype}.vim {rtp}/ftplugin/{thefiletype}/whatever.vim (见 :h rtp 了解更多详细信息)。
    3. 编辑这个新文件并将VIM命令放在其中。使用 :setlocal 用于确保文件类型特定设置仅适用于该文件的命令(例如,不要在所有文件类型中将所有注释变为紫色)。

    如果您计划覆盖默认设置,请参见vim发行版中的示例;或者 many ftplugins I wrote 否则),只需写下 设置局部 ,请 :*map <buffer> 等定义。

    它代表了更多的要输入的行,但至少它是有刻度的。