2009-02-23 45 views
13

我想知道是否有方法讓vim讀取.gitignore文件並使用它們來確定自動完成文件名時不顯示的選項。我可以讓vim尊重我的.gitignore文件嗎?

例如,在python中工作,我不想看到提供編輯的.pyc文件。我認爲vim有它自己的機制,我想知道如何從.gitignore加載信息到它。

回答

21

至於建議的@dwc,這裏有一個VIM腳本:

let filename = '.gitignore' 
if filereadable(filename) 
    let igstring = '' 
    for oline in readfile(filename) 
     let line = substitute(oline, '\s|\n|\r', '', "g") 
     if line =~ '^#' | con | endif 
     if line == '' | con | endif 
     if line =~ '^!' | con | endif 
     if line =~ '/$' | let igstring .= "," . line . "*" | con | endif 
     let igstring .= "," . line 
    endfor 
    let execstring = "set wildignore=".substitute(igstring, '^,', '', "g") 
    execute execstring 
endif 

採取這一來源,並把它在你的插件目錄中的文件,如~/.vim/plugin/gitignore.vim。它會讀取您的.gitignore文件並解析它,將其格式轉換爲適合wildignore的格式,然後設置該選項。

限制

  • 這會從那裏您啓動vim的目錄中讀取的.gitignore文件。沒有努力去尋找其他.gitignore文件並解析它們。或者,您可以在第一行指定文件的絕對路徑。
  • vim中的wildignore選項不支持的概念否定忽略像你可以在.gitignore文件。也就是說,你不能說:set wildignore=*.html,!foo.html讓它忽略除foo.html之外的所有html文件。因此,.gitignore行開頭!簡單地被忽略。
+0

僅供參考,以下是vim.org上的代碼:http://www.vim。org/scripts/script.php?script_id = 2557 – Florian 2012-03-26 09:32:21

18

Vim會忽略選項wildignore指定文件模式,所以你可以將它們像這樣:

:set wildignore=*.o,*~,*.pyc 

,或將同一行(不帶「:」)在你的〜/ .vimrc文件。如果你需要一些更加動態的東西來調整當前目錄中的.gitignore,那麼你需要做一些腳本,但是我會把它作爲別人的練習。

+2

很好的回答。注意:\ *。o \ *〜和* *。pyc之間不能有空格,所以它應該是:`:set wildignore = *。o,*〜,*。pyc`。乾杯 – 2010-02-15 15:36:41

2

我寫了一個插件這樣的:https://github.com/octref/RootIgnore

它可以自動添加.gitignore模式,以您的wildignore。
一些方便的功能:

  • 當你在一個子目錄,如下所示:
my_proj/ 
    .gitignore 
    .git/ 
    sub/ 

如果你cd到子,和開放的Vim那裏,插件進入遞歸地找到.gitignore並將其添加到wildignore

  • 您可以通過let g:RootIgnoreUseHome = 1輕鬆添加~/.gitignore規則。
相關問題