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固定だと思うんだけどどうなんですかね!?