Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement Vim:使用;如果;在奥格集团?_If Statement_Vim_Autocommand - Fatal编程技术网

If statement Vim:使用;如果;在奥格集团?

If statement Vim:使用;如果;在奥格集团?,if-statement,vim,autocommand,If Statement,Vim,Autocommand,我只想定义一个执行一些外部命令的自动命令。例如,在编译后删除一些自动生成的文件。我在Windows和Linux上工作,在这两种平台上使用的外部命令不同 因此,我可以定义: if has("win32") autocmd foo bar_win else autocmd foo bar_nix endif 如果我想在augroup中定义这个自动命令,我应该简单地将这段代码放入一个augroup中,如: augroup fooo

我只想定义一个执行一些外部命令的自动命令。例如,在编译后删除一些自动生成的文件。我在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
语句。然后以通常的方式定义自动命令并调用此函数。哪个更好


谢谢

augroupfoo
augroupend
不划分代码块,因此无论您是否将功能检查放在那里或其他地方

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

  • vimrc
    顶部附近定义一个空的自动命令组:

    augroup foo
        autocmd!
    augroup END
    
  • 稍后运行功能检查:

    if has("win32")
        autocmd foo Event * command for windows
    else
        autocmd foo Event * command for unices
    endif
    
    由于您的自动命令属于组
    foo
    ,因此当您
    :source$MYVIMRC
    时,它们将被正确删除


  • 当然,双向都有效。第一个比较干净,效率稍微高一些,我觉得还可以。