Vim: 在augroup中使用"if"?

Vim: Use "if" in augroup?

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

因此,我可以定义:

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

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

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

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

谢谢!

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.

  3. 时它们会被正确删除