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サブモジュールの内容を学習しません(「gitls-files」はサブモジュールに再帰しないため、 Ctrl-Pの素朴なディレクトリトラバーサルはそうです)。
'find'を使用してgitリポジトリのインデックスを作成しようとしましたが、そうすると、.gitディレクトリ、オブジェクトファイル、およびCtrl-Pが通常自動的に無視することがわかっているその他のあらゆる種類のインデックスを作成することになります。user_commandを提供することは、無視するファイルに関する組み込みロジックに完全に取って代わるようです。おそらく、逆grepを一緒にハックして特定の要素を削除することもできますが、誰かがこれに対するより洗練された解決策を見つけたに違いないようです。
遅い組み込み検索に頼る以外に、Ctrl-Pでgitリポジトリ内のすべてのファイル(すべてのサブモジュール内のファイルを含む)にインデックスを付けるための別の、おそらく賢い方法はありますか?