$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

git grepの結果をfzfで絞り込んでエディターで開く

エディター側でなくCLI側でgit grepするのはいろんなオプションを渡せて便利だ。たとえば --and--or でいろんな条件で絞り込んだり、-C オプションで周辺の行も一緒に見ることもできる。

一方でCLI側でのgit grepでは、エディター側をさっと開きにくいという問題がある。そこで、git grepの結果をfzfでさらに絞り込んだ上で選択するとすぐにエディターで開けると便利そうと感じ、git-grep-fzfというコマンドを作ってみた。

使ってみている様子はこんな感じ。grepした後にfzfで絞り込んで該当行をエディターで開いている。https://github.com/golang/go に対してgit-grep-fzf Sortedしている様子。

また、git grepに渡せるオプションはこのコマンドに渡すことができるので、複数条件で絞り込んで周辺行を見ながら開くことも可能だ。 git-grep-fzf -e slices --and -e Sorted -C 3 としている様子。

実装は以下のコードの通り。僕はCursorというエディターを使っているためcursorコマンドを呼び出しているが、VS Codeならcodeコマンドを使えば同じことができる。 https://github.com/shibayu36/config-file/blob/master/bin/git-grep-fzf

#!/usr/bin/env bash

file=$(
    git grep -n --recurse-submodule --color=always $@ |
    fzf --ansi |
    # replace - with : for line numbers
    sed -E 's/-([0-9]+)-/:\1:/' |
    # cut the file path and line number
    cut -d: -f1-2
)

if [ -n "$file" ]; then
    cursor --goto $file
fi

便利なのでご利用ください。