我想使用ag (银色搜索器)与ctrlp和vim。我的.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添加到ag命令中,它会显示所有隐藏的文件,但不会考虑wildignore或.gitignore。有没有可能让它尊重这些?
发布于 2013-09-04 04:38:55
如果您通过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:默认情况下,| |g:ctrlp_user_command| |和|g:ctrlp_custom_ignore|仅在|globpath()|用于扫描文件时才适用,因此,当使用通过wildignore定义的命令时,这些选项不适用。
所以你只能任由你的搜索工具摆布了,在本例中就是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,它包含一个使CtrlP使用wildignore模式的ignore键。然而,我从来没有尝试过,文档指出了一个潜在的性能影响。如果您不喜欢我提出的另一个解决方案(see documentation),您可以尝试此方法。
注意事项#3:除非使用|Dictionary|格式并定义了'ignore‘并将其设置为1,否则在使用这些自定义命令时,|wildignore|和|g:ctrlp_custom_ignore|选项将不适用。当不存在时,默认情况下'ignore‘设置为0,以保留使用外部命令的性能优势。
https://stackoverflow.com/questions/18285751
复制相似问题