👍

ZshでのGitのコマンド補完をもっと便利にする on Linux

2021/08/31に公開

はじめに

普段は macOS 上に Homebrew で入れた Zsh + Git を使っているのですが、コマンド補完が割と便利に使えています。例えば、git com あたりで Tab を押すと git commit と最後のスペース込みで補完をしてくれますし、他にも git st あたりで補完を実行すると git status という感じに補完してくれます。

一方で、たまに WSL 上の Ubuntu で同様の作業をすることがあるのですが、同じように git com あたりで補完しようとすると commit, commit-graph, commit-tree の3つが補完候補として上がってきてしまい、いちいちこの中から commit を選んであげる手間が発生し、作業のテンポ感が損なわれてしまいます。

この記事では、こうした引っかかりを生む挙動を修正し、Zshで頻出サブコマンドの補完に特化した補完候補を出してくれるように設定する方法を紹介します。

補完ファイルのインストール

実は Git ではオフィシャルに zsh 用の補完を定義したスクリプトを配布しています。こいつを仕込んでしまえば、macOS 上のそれと同じ挙動を再現できます。

ディレクトリの準備

zsh 補完用のファイルを置くディレクトリを適当に作ってしまいましょう。

$ mkdir -p ~/.zsh/completions

補完ファイルのダウンロード

wget で Github から落としてきます。なお、bash用の補完スクリプトに依存しているようなので、これも一緒に落とします。zsh のコマンド補完は _(command_name) のファイルを自動的に読み込むようになっているので、ダウンロードしてくる際にファイル名が _git となるようにオプションで仕込んでおくと二度手間にならず便利です。

$ cd ~/.zsh/completions
$ wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
$ wget -O _git https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.zsh

.zshrc の編集

ダウンロードが終わったら .zshrc を編集して、起動時に補完が有効となるようにしておきます。

~/.zshrc
fpath=(
  ${HOME}/.zsh/completions
  ${fpath}
)
autoload -Uz compinit
compinit

あとはターミナルの再起動や source ~/.zshrc などで再読込させれば便利な補完が効くようになります。

おわりに

公式から出ている補完ファイルを使えば同じ挙動になるというのは正直盲点でした。このように仕込み自体は簡単なので、もし Linux で Git を作業しているときに困っている方がいたらこの設定を行ってみてください。

Discussion