Vagrantのルートディレクトリであることをプロンプトに表示する

クライアント上にVagrantを使ってたくさんの仮想マシンを保持していると、カレントディレクトリが仮想マシンのディレクトリにいるのかや、そのサブディレクトリなのかなどが分からなくなる時があります。hoge_serverのような名前をつけていると、Vagrantのディレクトリだったのか、それとも、プロビジョニングスクリプトだったのかなどと記憶をたどることになり、より混乱してしまいます。
分かりやすい状態であって欲しいので、プロンプトをカスタマイズします。

vagrant-prompt

以下のgistは、bashまたはszhを対象にして、カレントディレクトリがVagrantfileを含むかどうかの状態を表示するためのシェルスクリプトです。
プロンプトに、仮想マシンに関する状態が常に表示されます。

[vm]
仮想マシンのルートディレクトリにいる

[>vm]
仮想マシンのサブディレクトリにいる

(表示なし)
仮想マシンのルートまたはサブディレクトリにはいない

スクリプトファイル.vagrant-prompt.shは好きな場所においてください。ここでは~/.vagrant-prompt.shに置くものとします。

https://gist.github.com/KamataRyo/9ffd349ef806d5cdbc6b48949a853b63#file-.vagrant-prompt-sh

bashを使う場合は、以下の.bashrc~/.bashrcとして配置するか、既存のものに追記するなどのカスタマイズを行ってください。コードの中のsourceの引数は上記の.vagrant-prompt.shのパスを指定してください。出力は黄に着色しています。

https://gist.github.com/KamataRyo/9ffd349ef806d5cdbc6b48949a853b63#file-.bashrc

.zshrc
zshを使う場合は、以下の.zshrc~/.zshrcとして配置するか、既存のものに追記するなどのカスタマイズを行ってください。コードの中のsourceの引数は上記の.vagrant-prompt.shのパスを指定してください。出力は黄に着色しています。

https://gist.github.com/KamataRyo/9ffd349ef806d5cdbc6b48949a853b63#file-.zshrc


普段はgit-promptと混在させて使っていますが、あまり多くの情報を表示させると煩雑かもしれません。
screenshot

2016年7月5日
カレントディレクトリが存在しない時(rmdir ../curent-dirなどをした時)に無限ループしてしまうバグがあったため修正しました。

# .vagrant-prompt.sh
..
+ # prevent to trap while, when you are on not-existing dir
+  if [[ ! -d $dirname ]]; then
+      return
+  fi
..