Vim:在 augroup 中使用“if”?

hub*_*nya 4 vim if-statement autocommand

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

因此,我可以定义:

    if has("win32")
        autocmd foo bar_win
    else
        autocmd foo bar_nix
    endif
Run Code Online (Sandbox Code Playgroud)

如果我想在 a 中定义这个自动命令augroup,我是否应该简单地将这段代码放入 augroup 中,例如:

    augroup fooo
        autocmd!
        if has("win32")
            autocmd foo bar_win
        else
            autocmd foo bar_nix
        endif
    augroup END
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

rom*_*inl 5

augroup foo并且augroup END不要分隔代码块,因此无论您将功能检查放在那里还是其他地方都没有关系。

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

  1. 在靠近顶部的位置定义一个空的自动命令组vimrc

    augroup foo
        autocmd!
    augroup END
    
    Run Code Online (Sandbox Code Playgroud)
  2. 稍后运行您的功能检查:

    if has("win32")
        autocmd foo Event * command for windows
    else
        autocmd foo Event * command for unices
    endif
    
    Run Code Online (Sandbox Code Playgroud)

    由于您的自动命令属于组,foo因此当您执行:source $MYVIMRC.