CtrlP:忽略git仓库中子目录中的文件

时间:2014-11-01 20:52:47

标签: git vim gitignore ctrlp

对于我的回购,假设它被称为top

top\
  .gitignore
  foo\
  bar\

我希望CtrlP列出

文件
  1. foo\
  2. top \
  3. 中定义的.gitignore不会忽略

    如果我进入top\foo\,并从那里打开vim,1会满意,但不会满意2 如果我在top\打开vim,则会满意但不满意。

    如何实现1和2?

    我尝试了this gitignore vim script,但是当我在回购的根文件夹中打开vim时它只解析gitignore,所以我不能同时做1和2。 let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'相同,ag不会尝试访问repo根并从那里读取gitignore。
    g:ctrlp_working_path_mode设置为r,让CtrlP尊重顶层文件夹中的.gitignore,但top\下的所有内容都会被CtrlP列出。我只想要foo\中的文件。

    感谢。

2 个答案:

答案 0 :(得分:11)

its home page看起来您可以使用

let g:ctrlp_user_command = [
    \ '.git', 'cd %s && git ls-files . -co --exclude-standard',
    \ 'find %s -type f'
    \ ]

这将有利于尊重所有git的忽略模式处理,而不仅仅是顶级正.gitiginore模式。

答案 1 :(得分:1)

似乎没有明显的方法可以做到,所以我只是按照@kamaradclimber的建议,花了一个小时做了这个:RootIgnore
从来没有在VimScript中编码所以花了我一些时间: - )

您可以使用Vundle进行安装 它以递归方式向上搜索.git dir,获取与.gitignore目录相同的目录中的.git,并相应地设置wildignore

更新:
@ jthill的方法比我的方法更好。
但CtrlP具有自定义搜索命令,而CommandT则没有。所以我的插件对CommandT用户仍然有用。