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

10

对于我的代码存储库,假设它叫做top

top\
  .gitignore
  foo\
  bar\

我希望CtrlP列出满足以下两个条件的文件:

  1. 位于foo\
  2. 不被top\目录中定义的.gitignore忽略

如果我在top\foo\路径下打开vim,则1满足但2不满足。
如果我在top\路径下打开vim,则2满足但1不满足。

我应该如何同时满足1和2?

我尝试使用这个gitignore vim脚本,但只有在我在一个repo的根目录中打开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\目录下的所有文件,而我只想要foo\下的文件。

谢谢。


CtrlP foo 怎么样? - romainl
@romainl 这个可以用,但是每次都要输入 :CtrlP foo。如果 foo 在项目根目录下面很深的地方,那就很难用了。 - octref
你能否修改 Vim 脚本,使其在父目录中递归搜索 .gitignore 文件? - kamaradclimber
我将CtrlP设置为使用git ls-files作为其文件列表。这将忽略.gitignore文件,但也会丢失未跟踪的文件。对于未跟踪的文件,我只需使用git add命令,它们就会变为已跟踪状态,然后CtrlP就可以找到它们了。 - Sukima
2个回答

12

其主页看来,您可以使用它。

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

这样做的好处是尊重 Git 的忽略模式处理,而不仅仅是顶层的正 .gitignore 模式。


2
似乎没有明显的方法来完成它,所以我只是按照@kamaradclimber的建议,花了一个小时做了这个:RootIgnore
以前从未编写过VimScript,所以花了一些时间 :-)

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

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


我来自未来。显然,CommandT现在已经内置了这个功能 - m8mble

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接