2015年7月26日日曜日

Gitを使う上で便利なzshの設定

僕がzshrcに設定している Git 用の設定を紹介する。
  • プロンプトにブランチ名を表示
  • run-help をカスタマイズ
あんまりヘビーなカスタマイズはしてなくて,必要最低限,って感じだ。

まずは「プロンプトにブランチ名を表示」から。


設定は以下の通り。

autoload -Uz vcs_info
zstyle ':vcs_info:*' formats '(%b)'
zstyle ':vcs_info:*' actionformats '(%b|%a)'
function precmd () { vcs_info }
RPROMPT='[%(5C.%4C.%~)${vcs_info_msg_0_}]'

1行目はプロンプトにVCS関連情報を表示するためのモジュールのロード。

2, 3行目は表示内容のフォーマット指定。指定可能なフォーマットはいくつもあるけど,僕は formats と actionformats だけ指定してる。
 formats はブランチ名の表示で,rebase -i や merge のコンフリクトなど特殊な状況が発生してないときに使われるフォーマットだ。 %b はカレントブランチの名前。
actionformats は上記の特殊な状況において使われるフォーマットを指定する。 %a は actionformats の中でのみ意味がある。
他に svn 等,VCS個別に設定可能な内容があるみたいだけど,Git以外はあまり使わないので設定していない。

4行目は precmd という関数を定義してるけど, precmd とはプロンプト表示前に実行されることになっている関数で,なければ↑のように定義する。すでに他に定義しているのであれば, precmd 内のどこかで vcs_info を実行するよう書いてあげればいい。

5行目は プロンプト表示内容の指定で,ここではRPROMPT, つまりコマンドラインの右側に表示されるプロンプトを指定している。VCSの情報は ${vcs_info_msg_0_} が置換される。左の%(5C.%4C.%~) はカレントディレクトリの表示だ。これは必須ではないけれど,カレントディレクトリも合わせて表示することで,今どのリポジトリに居るのかがわかりやすくなる。

設定可能なフォーマットなど,詳細は 公式ドキュメント が詳しい。


次は「run-helpをカスタマイズ」について。

これは run-help が何か,という点とカスタマイズが必要な理由を知らないと意味がわからないと思うので,まずは run-help そのものについて説明する。

zsh はデフォルトのキーバインド(のはず)で,Alt-h で run-help という機能を呼び出せる。これは記述中のコマンドの man を呼び出す機能で,たとえば

% ls -

までコマンドラインに入力した状態で man を見たくなったら, Alt-h を押せば ls の man が表示され,manを終了すれば上のコマンドラインの状態に戻してくれる。パイプでつないでればつないだ後のコマンドを表示してくれたり,文脈依存の動きをしてくれるので大変便利なんだけど, git のコマンドラインを入力しているときはあまり有り難みがない。なぜかというと,

% git checkout --

とまで入力した状態で Alt-h を押すと man git と同じ内容が表示されてしまう。このとき本当に欲しい情報は man git-checkout なので,これでは残念としか言いようがない。

そこで,run-help のカスタマイズ設定をすれば git コマンドのコンテキストを把握した動作になってくれる。例えば

% git checkout

まで入力した状態で Alt-h すれば man git-checkout を実行してくれるし,

% git branch

まで入力した状態で Alt-h すれば man git-branch を実行してくれる。それだけじゃない。サブコマンドをエイリアスしてても,そいつを理解してくれる。例えば

% git config --global alias.co checkout

しているとしても,

% git co 

という状態で Alt-h すれば man git-checkout を実行してくれるんだ。 git はオプションがたくさんあるので, 結構 man を引くことになるんだけど, このカスタマイズをしているかどうかで作業効率が全然変わってくる。

では本題の設定。

alias run-help >/dev/null 2>&1 && unalias run-help
autoload -Uz run-help run-help-git run-help-openssl run-help-sudo

これだけ。ついでに openssl, sudo に関しても同様の動きになるよう設定している。他に p4, svk, svn に対してもモジュールが用意されているけど,個人的に使わないので設定していない。




0 件のコメント:

コメントを投稿