在ctrlp + vim中使用ag

时间:2013-08-17 06:12:05

标签: 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/*

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

1 个答案:

答案 0 :(得分:35)

如果您通过ctrlp_user_command使用自定义查找器,则CtrlP(see documentation不会使用多个选项,包括ctrlp_show_hidden ctrlp_custom_ignore和vim的wildignore模式)。

  

<强> G:ctrlp_show_hidden

     

...

     

注意:使用时定义的命令不适用   | G:ctrlp_user_command |正在使用。

     

<强> G:ctrlp_custom_ignore

     

...

     

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

所以你不受你的搜索工具的支配,在这种情况下,ag。幸运的是,你可以做一些应该给你想要的行为。

要隐藏的小文件显示,但仍然尊重ignore个文件,请使用ag的--hidden选项:

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模式。但是,我从来没有尝试过这个,文档指出了潜在的性能影响。如果您不喜欢我提出的其他解决方案(see documentation),您可以尝试使用此方法。

  

注意#3:除非|字典|使用格式并且'忽略'是   定义并设置为1,| wildignore |和| g:ctrlp_custom_ignore |   使用这些自定义命令时,选项不适用。什么时候   不存在,'ignore'默认设置为0以保持性能   使用外部命令的优势。