14

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

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

4

3 回答 3

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让它忽略所有 html 文件,除了foo.html. 因此,.gitignore以 ! 开头的行 被简单地忽略了。
于 2009-02-24T14:05:26.747 回答
20

Vim 将忽略 option 中指定的文件模式,所以你可以像这样设置它们: wildignore

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

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

于 2009-02-23T23:45:39.793 回答
3

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

它可以自动将.gitignore模式添加到您的 Wildignore。
一些方便的功能:

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

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

  • 您可以通过 轻松添加~/.gitignore规则let g:RootIgnoreUseHome = 1
于 2015-03-18T16:05:11.833 回答