2014-11-01 91 views
8

对于我的回购中忽略子目录中的文件,假设它被称为topCtrlP:一个git回购

top\ 
    .gitignore 
    foo\ 
    bar\ 

我想CtrlP要列出

  1. foo\
  2. 也是不可忽视的文件由.gitignore定义top \

如果我cd到top\foo\,并从那里打开VIM,1会满意,但并不2.
如果我打开VIM上top\,2会满意,但不是1

如何实现这两个1和2?

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

谢谢。

+0

'CtrlP foo'怎么办? – romainl 2014-11-01 21:26:15

+0

@romainl这个工程,但我必须输入:CtrlP foo每次。如果foo远低于项目根目录,那么它很难使用。 – octref 2014-11-02 02:02:15

+0

你不能修改vim脚本来递归搜索父目录中的.gitgnore吗? – kamaradclimber 2014-11-02 09:17:08

回答

10

its home page它看起来像你可以使用

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

这将有纪念所有的git的忽略模式处理的,不只是顶层积极.gitiginore模式的优势。

1

似乎没有明显的方式做到这一点,所以我只是跟着@kamaradclimber的建议下,花了一个小时,使这个:RootIgnore
Vimscript中从来没有编码之前,所以我花了一些时间:-)

您可以使用Vundle进行安装。
递归搜索.git目录,获取.gitignore.git目录相同的目录,并相应地设置wildignore

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