2016-09-22 24 views
1

我只想定義執行一些外部命令的自動命令。例如,編譯後刪除一些自動生成的文件。我在Windows和Linux上工作,在這兩個平臺上使用的外部命令是不同的。Vim:在augroup中使用「if」?

因此,我可以定義:

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語句。然後以通常的方式定義自動命令並調用該函數。哪個更好?

謝謝!

+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正確刪除。