monoの開発ブログ

zshのvcs_infoを一時的に無効化する

zshには、プロンプトにGitなどのバージョン管理ツールの情報を表示できるvcs_infoという機能があります。

vcs_infoを設定したプロンプト

上の図の緑の文字が、vcs_infoを使って得られる情報です。ちょっとしたことではありますが、とても便利なので使っていない人はぜひ試してみてください。

この機能、便利は便利なのですが、そのさり気ない見た目とは裏腹に、内部では、ディレクトリ以下のすべてのファイルに対して変更の有無をチェックするというそこそこ大掛かりな処理が行われます。そのため、NFS越しでLinuxカーネルのコードをいじっている場合のように、ファイルが多かったりI/Oに時間が掛かったりする状況下では、プロンプトが表示されないまま延々と待たされてしまい不便です。そこで、特定のディレクトリでvcs_infoを無効化する方法を紹介します。

vcs_infoでは、disable-patternsを指定した場合、$PWDがパターンとマッチする場合には動作しません。以下は、$HOME/work/linux-stableディレクトリとその配下でvcs_infoを無効化するコマンドの例です。なお、パターンにはグロブオペレータが使えます。

zstyle ':vcs_info:*' disable-patterns "$HOME/work/linux-stable(|/*)"

実際に使う場合は、これを.zshrcなどに書いておくことになると思います。個人的には、このような特定の環境でのみ必要になる設定は.zshrc.localに分離することをオススメします。

参考