Ink

Contents related to tech, hobby, etc

fzf.vimでカレントディレクトリ以外のGitファイルを検索

|

fzf.vimでカレントディレクトリ以外のGitファイルを検索

=GFiles=は便利

=GFiles=は、カレントディレクトリにgitレポジトリがあると仮定して、そのレポジトリに認識されるファイル(=一度はコミットされているファイル) の一覧を作り出します。

しかし、場合によっては「カレントディレクトリ以外のgitレポジトリにあるファイルを参照したい」ことがあると思います。

例えば、私は普段プロジェクトに取り組んでいる最中にブログを書いたりするのですが、まさにその時などです。 カレントディレクトリはプロジェクトディレクトリのままで、ブログのレポジトリに対して=GFiles=を使いたいのです。

これは公式の方法が(多分)ないので直接書き換えます。

=~/.vim/bundle/fzf.vim/autoload/fzf/vim.vim=の=s:getgitroot()=がgitレポジトリを見つけるためのコードなので、ここにfugitiveが使う=b:gitdir=変数の中身を適用するように編集します。

function! s:get_git_root() let root = split(system('git rev-parse --show-toplevel'), '\n')[0] return v:shell_error ? '' : root endfunction

こうだったのが

function! s:get_git_root() let root = split(system('git rev-parse --show-toplevel'), '\n')[0] let root_ = root ? root : b:git_dir return v:shell_error ? '' : root_ endfunction

こうすることにより、=gitdir=も有効に検索されるようになりました。