2009-02-23 49 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规则。
相关问题