git - 如何让 Vim Ctrl-P 插件在 git 子模块中索引文件

标签 git vim git-submodules vim-plugin

如果我在 native 开箱即用地运行 Ctrl-P,它可以 100% 按我的意愿工作,除了我使用的代码库的大小,索引目录需要很长时间。

为了让 Ctrl-P 处理我正在处理的项目大小,我在我的 .vimrc 文件中使用以下(相当流行的)user_command 设置来提供 native 帮助实用程序,以便更快地为 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 存储库中的所有文件,包括其所有子模块中的文件,而不是诉诸其缓慢的内置搜索?

最佳答案

您可以使用带有选项的查找来过滤掉您不需要的文件,例如:

find . -type f \( -name "*.cpp" -or -name "*.h" \)

或删除 .git 目录:

find . -path '.git' -prune -o -print

但这不是一个聪明的解决方案。

关于git - 如何让 Vim Ctrl-P 插件在 git 子模块中索引文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14723589/

相关文章:

git - 为什么 git remote -v 不显示与我的 .git/config 相同的 url?

git - 如何从 Git 跟踪中排除 R.java(事后)?

Git 推送到 gh-pages(更新被拒绝)

Vim:尝试修改拼写检查器以排除 "rare"个单词

git - 删除 Git 子模块中的旧分支是安全的 w.r.t. 'supermodules' 的可用历史记录?

java - 在 IntelliJ 的 Kotlin > Java 转换后将源代码恢复为 Java

字符串中任意位置的 VIM 代码补全

python - Vim 插件无法识别 CentOS 中的 python 文件

git - 子模块 git visual studio "fatal: unexpected sequence in commit output"他们可以 checkin 吗?

git - 如何修复 Git 子模块导致 404 未找到..?