10

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

top\
  .gitignore
  foo\
  bar\

我希望 CtrlP 列出以下文件

  1. 在下面foo\
  2. 不被top\.gitignore中的定义忽略

如果我 cd intotop\foo\并从那里打开 vim,1 会满足,但不是 2。
如果我打开 vim on top\,2 会满足,但不是 1。

如何同时实现 1 和 2?

我试过这个 gitignore vim script,但它只gitignore在我在 repo 的根文件夹中打开 vim 时解析,所以我不能同时执行 1 和 2。
相同let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'ag不会尝试进入 repo 根目录并从那里读取 gitignore。
设置g:ctrlp_working_path_moder让 CtrlP 优先.gitignore在顶部文件夹中,但下面的所有内容都top\将由 CtrlP 列出。我只想要foo\.

谢谢。

4

2 回答 2

12

它的主页看起来你可以使用

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

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

于 2014-11-04T06:39:55.387 回答
2

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

您可以使用Vundle安装它。
它向上递归搜索.gitdir,获取.gitignore与 dir 相同的.gitdir,并wildignore进行相应设置。

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

于 2014-11-03T01:21:26.447 回答