ctrlp_custom_ignore配置未生效:doc目录文件仍被搜索到如何解决
我之前也碰到过一模一样的情况,单纯给g:ctrlp_custom_ignore赋值字符串'doc'确实容易踩坑,主要是CtrlP对这个配置的语法有特定要求,下面几个步骤应该能帮你搞定:
修正配置的语法格式
CtrlP的g:ctrlp_custom_ignore支持两种配置方式:如果用字符串,会同时匹配文件和目录,但默认是模糊匹配(比如文件名带doc的也会被忽略),而且没法精准指定只忽略目录。如果你只想忽略名为doc的目录,推荐用字典形式分别配置文件和目录的规则:let g:ctrlp_custom_ignore = { \ 'dir': '\v(doc)$', \ 'file': '' \ }这里
\v启用Vim的"非常魔法"正则模式,(doc)$确保精确匹配名称为doc的目录,不会误判其他带doc字样的文件或目录。确认配置的加载顺序
如果你用插件管理器(比如vim-plug、Vundle)安装CtrlP,一定要把g:ctrlp_custom_ignore的配置写在插件加载语句之后。比如用vim-plug的话,正确的顺序是先加载插件,再设置配置:call plug#begin('~/.vim/plugged') Plug 'kien/ctrlp.vim' call plug#end() " 这里写你的CtrlP配置 let g:ctrlp_custom_ignore = { \ 'dir': '\v(doc)$', \ 'file': '' \ }要是配置写在插件加载前,插件初始化时会覆盖你的设置,导致规则不生效。
清除CtrlP的缓存
CtrlP会缓存扫描到的文件列表,修改忽略规则后旧缓存可能还在。你可以在Vim里执行:CtrlPClearCache命令,然后重新打开CtrlP(按<C-p>),这时候应该就不会看到doc目录里的文件了。排查冲突配置
要是上面的方法都没用,建议暂时注释掉其他CtrlP相关的配置(比如g:ctrlp_working_path_mode或者g:ctrlp_user_command),只保留g:ctrlp_custom_ignore测试。有些配置会改变CtrlP的搜索范围,可能导致你的忽略规则被绕过。
内容的提问来源于stack exchange,提问作者Jason Swett

