我可以让vim尊重我的.gitignore文件吗?

时间:2009-02-23 23:38:18

标签: git vim gitignore

我想知道是否有办法让vim读取.gitignore文件并使用它们来确定自动完成文件名时不显示的选项。

例如,在python中工作,我不希望看到提供编辑的.pyc文件。我认为vim有自己的机制,我想知道如何从.gitignore加载信息。

3 个答案:

答案 0 :(得分:22)

正如@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行开头!简直被忽略了。

答案 1 :(得分:19)

Vim将忽略选项 wildignore 中指定的文件模式,因此您可以这样设置它们:

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

或者在〜/ .vimrc文件中放置相同的行(不带“:”)。如果你需要一些更动态的东西,比如调整到当前目录中的.gitignore那么你需要做一些脚本,但我会把它留给其他人做练习。

答案 2 :(得分:3)

我为此写了一个插件:https://github.com/octref/RootIgnore

它可以自动为您的野生动物添加.gitignore个模式 一些方便的功能:

  • 当您在子目录中时,如下所示:
my_proj/  
   .gitignore  
   .git/
   sub/

如果你进入sub,并在那里打开Vim,插件会递归递增,找到.gitignore并将其添加到wildignore

  • 您可以通过~/.gitignore轻松添加let g:RootIgnoreUseHome = 1规则。