ZshでのGitのコマンド補完をもっと便利にする on Linux
はじめに
普段は 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
を編集して、起動時に補完が有効となるようにしておきます。
fpath=(
${HOME}/.zsh/completions
${fpath}
)
autoload -Uz compinit
compinit
あとはターミナルの再起動や source ~/.zshrc
などで再読込させれば便利な補完が効くようになります。
おわりに
公式から出ている補完ファイルを使えば同じ挙動になるというのは正直盲点でした。このように仕込み自体は簡単なので、もし Linux で Git を作業しているときに困っている方がいたらこの設定を行ってみてください。
Discussion