どうも、たくチャレ(@takuchalle)です。

最近ではエディタやIDEにバージョン管理機能がついて簡単にgitを使えるようになってきてると思いますが、まだまだコマンドラインでgitを使ってる人もいると思います。

コマンドラインを使っててもgit statusしたパスをマウスでコピペしてませんか?僕はしてました。

そこで今回はfzfを使って、簡単にgit addできるようにカスタマイズしたいと思います。

前提

使用したバージョンはそれぞれ以下の通りです。

  • bash 4.4.19
  • fzf 0.17.5

fzf とは

:cherry_blossom: A command-line fuzzy finder. Contribute to junegunn/fzf development by creating an

いわゆるインタラクティブフィルタとか選択的フィルタとか呼ばれるツールです。同じようなツールではpecoが有名だと思いますす。

fzfの詳しい紹介はこちらを参照してください。

インストールしていない人はインストールしておいてください。

bash の設定

.bashrcに下の設定をしてsourceすると、エイリアスで設定したfaコマンドとして使えるようになります。

fzf-add() {
	local selected
	selected="$(git status -s | fzf | cut -c3-)"
	if [ -n "$selected" ]; then
		echo $selected
		git add $selected
	fi
}
alias fa="fzf-add"

簡単に説明します。

git status-sオプションを使てあげると通常より短く表示されます。オプションを付けない時よりこちらの出力の方が加工しやすいので、こちらを使います。

git status -sの結果の先頭の3文字は変更の有無を表すので、cutコマンドで削除します1。その結果をselected変数に入れてgit addします。念のため選択したファイルをechoで出力しています。

fzfの部分は先ほど紹介したpecoでも同じことができるはずです。

まとめ

今回はfzfを使ってgit addを簡単にする方法を紹介しました。

本当はEmacsmagitというプラグインをメインに使いたいんだけど、WSL の Ubuntu だと死ぬほど遅いので使い物にならず、こういう形に落ち着きました。

最初zshを使っててカスタマイズに疲れてきてfishに乗り換えて使ってるけど、最近はいろんなコマンドラインツールが増えてきたから実はbashでもいけるんじゃねってことでbashをまた試しているところです。


  1. awk を使いたかったんだけど、$() の中での使い方がイマイチ分からなくて断念