Vim:在augroup中使用“if”?

时间:2016-09-22 09:53:51

标签: if-statement vim autocommand

我只想定义一个执行一些外部命令的自动命令。例如,在编译后删除一些自动生成的文件。我在Windows和Linux上工作,在这两个平台上使用的外部命令是不同的。

因此,我可以定义:

    if has("win32")
        autocmd foo bar_win
    else
        autocmd foo bar_nix
    endif

如果我想在augroup中定义这个自动命令,我应该简单地将这段代码放入一个像这样的群组:

    augroup fooo
        autocmd!
        if has("win32")
            autocmd foo bar_win
        else
            autocmd foo bar_nix
        endif
    augroup END

我尝试了这种方法,看起来这很有效。我想知道这是否是正确的方法。我能想到的另一种方法是将外部命令写入一个我可以使用if语句的函数中。然后以通常的方式定义自动命令并调用此函数。哪个更好?

谢谢!

1 个答案:

答案 0 :(得分:3)

augroup fooaugroup END不会划分代码块,因此如果您将功能检查放在那里或其他位置并不重要。

但是如果你想要安全的灵活性,你可以遵循这种替代模式。

  1. vimrc顶部附近的某处定义一个空的自动命令组:

    augroup foo
        autocmd!
    augroup END
    
  2. 稍后运行您的功能检查:

    if has("win32")
        autocmd foo Event * command for windows
    else
        autocmd foo Event * command for unices
    endif
    

    由于您的自动命令属于组foo,因此:source $MYVIMRC时会正确删除它们。