CtrlP (ctrlp.vim)では上位ディレクトリを辿って.git
とかがあったらそこを基準に起動するようにデフォルトではなっている。でもちょっと考えれば分かる通り、深い階層でかつGit配下ではない場合に非常に重い。ので設定でアクティブなバッファーのファイルのディレクトリを基準にしたりとかしてた。けどやはりGit配下の場合はやっぱりそれを考慮して欲しいので、Git配下かどうかを調べて適宜切り替える関数を書いて使い始めた。
system()
でシェルのコマンドを呼ぶとその終了コードがv:shell_error
に格納されるので、それを利用した。
nnoremap <Leader>f :call <SID>CallCtrlPBasedOnGitStatus()<Return>
function! s:CallCtrlPBasedOnGitStatus()
let s:git_status = system("git status")
if v:shell_error == 128
execute "CtrlPCurFile"
else
execute "CtrlPRoot"
endif
endfunction
Git配下じゃない場合のgit status
の終了コードは128
固定だと思うんだけどどうなんですかね!?