あんパン

こしあん派

zshでghq管理ディレクトリ以下にいるときはPROMPTのpwdを省略して表示する

motemen/ghq使い始めた.ghqはGitのリポジトリ管理ツールみたいな感じ.

ghq自体かなり便利なのだけど,PROMPTにpwdを表示しているとこれが長くなって大変なことになる.

f:id:masawada:20160222013718p:plain

というわけで,ghq管理ディレクトリ以下にいるときは省略しようというのが今回の試み.

以下のコードを.zshrcに書いてシェルを再起動する.

precmd () {
  RPROMPT="%{${fg[cyan]}%}[$(pwd | sed -e "s,^$HOME,~," | perl -pe "s/~\/(.ghq|.go\/src)\/.+?\//ghq:/")]%{${reset_color}%}"
}

f:id:masawada:20160222014120p:plain

こうなる.

この設定のキモは

$(pwd | sed -e "s,^$HOME,~," | perl -pe "s/~\/(.ghq|.go\/src)\/.+?\//ghq:/")

の部分.pwdして,ルートからの絶対パスのうちホームディレクトリまでをsedで~に置き換えて,その後Perlで~/.ghq/または~/.go/src/があればこれをghq:に置換している.これはぼくが$GOPATH~/.ghqを管理ディレクトリにしているためで,ここは自分の設定にあわせて書き換えるとよさそう.なんかもう少し良い置換方法とかあったら教えてください.

precmdはプロンプト表示直前に実行される関数で,これを定義するとよしなに実行してくれる.設定がわちゃわちゃしているのは色の指定とかが入ってるため.

これで快適にghqを使うことができそう.zsh以外で使えるのかどうかは知らない.