在ctrlp + vim中使用ag

25

我想在vim中使用ctrlp和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能够包含隐藏文件,但这些文件是被隐藏的。如果我在ag命令中添加-u,它会显示所有隐藏的文件,但不会遵守wildignore或.gitignore。有可能让它遵守这些规则吗?


我的回答解决了您的问题吗?还是您需要额外的信息? - mcanfield
当然可以!忘记将您的答案标记为已接受,非常抱歉。非常感谢! - Richard
1个回答

41
如果您正在使用自定义查找器(通过ctrlp_user_command),则CtrlP不会使用包括ctrlp_show_hiddenctrlp_custom_ignore和vim的wildignore模式在内的一些选项(请参阅文档:see documentation)。 ...
注意:当使用由|g:ctrlp_user_command|定义的命令时,不适用此选项。 ...
注意1:默认情况下,只有在使用|globpath()|扫描文件时,才应用|wildignore|和|g:ctrlp_custom_ignore|,因此当使用由|g:ctrlp_user_command|定义的命令时,这些选项不适用。
因此,您需要依靠搜索工具(在本例中为ag)。幸运的是,您可以采取一些措施,从而获得所需的行为。
要使您的隐藏点文件出现,但仍然遵守ignore文件,请使用--hidden选项: let g:ctrlp_user_command = 'ag %s -l --nocolor --hidden -g ""' 现在,为了定义要忽略的模式,您可以使用ag自己的忽略文件.agignore。这可以是每个目录或全局的文件,ag将在每次运行时检查它们。您需要将它放在home目录下~/.agignore。我知道使用vims的wildignore来处理模式可能会很好,但是使用.agignore时,当从cli使用ag时,您会获得这些限制的奖励。如果您想搜索所有文件,请使用您提到的ag -u命令来绕过任何ignore文件。
最后,还有一个字典格式可用于定义g:ctrlp_user_command,其中包含一个ignore键,将使CtrlP使用wildignore模式。然而,我从未尝试过这个方法,文档指出了可能会对性能产生影响。如果您不喜欢我的其他建议的解决方案,可以尝试这种方法(请参阅文档)。
注3:除非使用|Dictionary|格式并且定义并设置'ignore'为1,否则使用这些自定义命令时,|wildignore|和|g:ctrlp_custom_ignore|选项不适用。默认情况下,当不存在时,'ignore'设置为0以保留使用外部命令的性能优势。

你是从哪里知道ctrlp命令中末尾的“”部分的? - Gurdeep Singh Sidhu
每当我在新电脑上进行设置时,我总是会忘记将.agignore文件放置在_home目录_中(即~/.agignore),而不是应用程序的根目录。 - gabe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接