如果我开箱即用地运行 Ctrl-P,它可以 100% 地按我的意愿工作,除了我使用的代码库的大小,索引目录需要很长时间。
为了使 Ctrl-P 应对我正在处理的项目大小,我在我的 .vimrc 文件中使用以下(相当流行的)user_command 设置来提供本机帮助工具,以便更快地为 Ctrl-P 提供列表可用文件:
if has("unix")
let g:ctrlp_user_command = {
\ 'types': {
\ 1: ['.git/', 'cd %s && git ls-files']
\ },
\ 'fallback': 'find %s -type f | head -' . g:ctrlp_max_files
\ }
endif
这种方法使索引速度非常快,但是当以这种方式配置时,Ctrl-P 不会像在没有帮助程序的情况下运行时那样了解 git 子模块的内容(因为 'git ls-files' 不会递归到子模块中,而 Ctrl-P 的幼稚目录遍历确实如此)。
我也尝试过使用“查找”来索引 git 存储库,但是当我这样做时,我最终会索引 .git 目录、目标文件以及 Ctrl-P 通常知道会自动忽略的各种其他东西;似乎提供 user_command 完全取代了有关要忽略哪些文件的内置逻辑。我可能可以组合一个逆 grep 来删除某些元素,但似乎有人必须想出一个更优雅的解决方案。
除了诉诸其缓慢的内置搜索之外,是否还有另一种可能更聪明的方法来让 Ctrl-P 索引 git 存储库中的所有文件,包括其所有子模块中的文件?