在ctrlp + vim中使用ag

Ric*_*ard 22 vim ctrlp

我想用ctrlp和vim使用ag(银色搜索器).我在.vimrc中有这个:

if executable("ag")
    set grepprg=ag\ --nogroup\ --nocolor
    let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
endif

let g:ctrlp_show_hidden = 1

set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*/.tmp/*,*/.sass-cache/*,*/node_modules/*,*.keep,*.DS_Store,*/.git/*
Run Code Online (Sandbox Code Playgroud)

我希望ctrlp包含隐藏文件但隐藏文件.如果我添加-u到ag命令它显示所有隐藏文件但不尊重wildignore或.gitignore.有可能让它尊重这些吗?

小智 37

如果您通过ctrlp_user_command多个选项(包括ctrlp_show_hidden ctrlp_custom_ignore和vim的wildignore模式)使用自定义查找器,则CtrlP不会使用它(请参阅文档).

G:ctrlp_show_hidden

...

注意:当使用| g:ctrlp_user_command |定义的命令时不适用 正在使用.

G:ctrlp_custom_ignore

...

注意#1:默认情况下,| wildignore | 和| g:ctrlp_custom_ignore | 仅在| globpath()|时应用 用于扫描文件,因此当使用| g:ctrlp_user_command |定义的命令时,这些选项不适用.正在使用.

因此,您将受到搜索工具的支配,在本例中为ag.幸运的是,你可以做一些应该给你想要的行为.

要显示隐藏的dotfiles,但仍然尊重ignore文件,请使用--hiddenag选项:

let g:ctrlp_user_command = 'ag %s -l --nocolor --hidden -g ""'

现在要定义要忽略的模式,您可以使用ag自己的忽略文件.agignore.这可以是每个目录,也可以是ag将在每次运行时检查的全局目录.你把它放在你的家里~/.agignore.

我知道让vims wildignore处理模式会很好,但是当.agignore你从cli使用ag时,你会获得这些限制的奖励.如果要搜索所有文件,只需使用ag -u您提到的命令绕过任何ignore文件.

作为最后的花絮,你可以使用一种字典格式来定义g:ctrlp_user_command哪种格式包含一个ignore使CtrlP使用wildignore模式的键.但是,我从来没有尝试过这个,文档指出了潜在的性能影响.如果您不喜欢我提出的其他解决方案,尝试使用此方法(请参阅文档).

注意#3:除非| Dictionary | 使用format并定义'ignore'并将其设置为1,| wildignore | 和| g:ctrlp_custom_ignore | 使用这些自定义命令时,选项不适用.如果不存在,默认情况下将"ignore"设置为0,以保留使用外部命令的性能优势.