zshでgitのコマンドやブランチ名を補完できるようにする

zshでのgitコマンドの入力補完を設定する方法はいくつかあるようですが、最近はgitのソースツリーにcontrib/completion/git-completion.zshというものが含まれているので、今回はそれを利用する手順を紹介します。

設定を行うと、以下のようにコマンドやリモートリポジトリ、ブランチ名の補完ができるようになります。

今回、動作を確認した環境は以下の通りです。

  • Mac OS X 10.8.3
  • zsh 5.0.2
  • git 1.8.2.3

zshとgitをHomebrewでインストールしている場合は、zshの設定を行うだけで作業完了です。git 1.8.2.2に含まれる補完定義ファイルとgit 1.8.2.3に含まれるそれとでは結構違いがあるようなので(コミットログ)、gitはできるだけ最新版にアップデートしておきましょう。

Homebrewを使っていない場合は、補完定義ファイルをダウンロードしてからzshの設定を行う必要があります。

この記事ではそれぞれの場合での設定方法について紹介します。

補完定義ファイルの確認(Homebrewでインストールしている場合のみ)

Homebrewでzshとgit 1.8.2.2以降をインストールしている場合は、以下のように2つのgit用補完定義ファイルがインストールされているので、これを利用します。

$ ls -l `brew --prefix`/share/zsh/site-functions/
total 24
lrwxr-xr-x  1 juno  staff  57  5 10 09:04 _git@ -> ../../../Cellar/git/1.8.2.3/share/zsh/site-functions/_git
lrwxr-xr-x  1 juno  staff  72  5 10 09:04 git-completion.bash@ -> ../../../Cellar/git/1.8.2.3/share/zsh/site-functions/git-completion.bash

git 1.8.2.2以降をインストールしているのに上記の2つのファイルが存在しないときは、gitのインストール時にHomebrewがシンボリックリンクを作成するのに失敗しているかもしれません。

その場合は、以下のコマンドでリンクを再作成することができます。

$ brew link git

リンク作成中にエラーが発生するようであれば、強制的に既存のリンクを上書きして作成することもできます。

$ brew link --overwrite git

補完定義ファイルのダウンロード(Homebrewでインストールしていない場合のみ)

zshやgitをHomebrewでインストールしていない場合は、補完定義ファイルをダウンロードしてから設定を行います。

まず、zshの補完定義ファイルを置くためのディレクトリを用意します。既に同じ用途で使っているディレクトリがある場合はそこを使えばよいので、ディレクトリパスは適宜読み替えてください(ここでは~/.zsh/completionを作成して使います)。

$ mkdir ~/.zsh/completion/

gitのソースツリーに含まれる以下の2つのファイルをダウンロードして、先ほどのディレクトリに配置します。

(※2014-05-05 それぞれのリンク先が入れ替わっているとコメントでご指摘していただいたので、修正しました)

$ cd ~/.zsh/completion/
$ curl -O https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
$ curl -O https://raw.github.com/git/git/master/contrib/completion/git-completion.zsh

git-completion.zshgit-completion.bashに依存しているため、zshでのみ利用する場合でも両方のファイルが必要となります。また、デフォルトの状態では、2つのファイルが同じディレクトリにあることが想定されているので注意してください(配置場所を変える場合はgit-completion.zshのコメントを参照)。

次に、ダウンロードしたgit-completion.zsh_gitにリネームします。

$ mv git-completion.zsh _git

この時点で以下のようなファイル構成になっていれば準備完了です。

$ tree ~/.zsh/completion
/Users/juno/.zsh/completion
├── _git
└── git-completion.bash

0 directories, 2 files

設定の追加(いずれの場合も共通)

次に、~/.zshrcに設定を追加して、補完定義ファイルが読み込まれるようにします。既に同様の設定が記述済みの場合は適宜調整してください。

Homebrewでインストールしている場合:

fpath=($(brew --prefix)/share/zsh/site-functions $fpath)

autoload -U compinit
compinit -u

Homebrewでインストールしていない場合:

fpath=(~/.zsh/completion $fpath)

autoload -U compinit
compinit -u

いずれの場合も、fpathにパスを追加する前にcompinitが呼ばれてしまうとうまく動作しないので注意します。

最後に、zcompdumpをリビルドします。

$ rm -f ~/.zcompdump; compinit

これで設定完了です。

いったんターミナルを閉じるなどしてシェルを再起動すれば、gitコマンドでサブコマンドやブランチ名の補完が行われるようになります。

アニメファンのためのオンラインコミュニティ

qnyp(キュニップ)に参加すると、感想を読み書きしたり、感想をもとに自分の視聴記録を確認することができるようになって、アニメを見るのがより楽しくなります。

qnypを見てみる

タグ

  1. サービス (17)
  2. 新機能 (13)
  3. 技術 (20)
  4. 統計情報 (2)
  5. ビジネス (3)
  6. 雑談 (7)
  7. イベント (4)

年別アーカイブ

  1. 2019 (1)
  2. 2018 (1)
  3. 2017 (7)
  4. 2015 (2)
  5. 2014 (7)
  6. 2013 (9)
  7. 2012 (16)