zsh の vcs_info が神!のごとく重かったのですが…
- zsh の vcs_info が神 - HsbtDiary
- vcs_info で Subversion のリビジョン番号が出ない問題 - 永遠に未完成
- Git だろうと Mercurial だろうと、ブランチ名をzshのプロンプトにスマートに表示する方法 - mollifier delta blog
Cygwin1.7.1,zsh4.3.9の環境でやったら糞重かった。cdする度に引っかかる。なので、
「PWDが変わったときに」「PWDがバージョン管理下にある場合のみ」vcs_infoを実行するようにした。
もちろんこうしてしまうと、svn upとかしても表示が変わらないことになる。
まあその辺は手作業でchpwdするとかcd .するとか適当にやって。
precmdでチェックするようにしましたが、コマンドがcdやsvn updateやsvn switch等のような情報が変更される可能性がある場合のみvcs_infoを実行するようにしています。
うわ。超快適。
autoload -Uz vcs_info zstyle ':vcs_info:*' enable svn zstyle ':vcs_info:*' branchformat '%b:r%r' zstyle ':vcs_info:*' formats '[%s]%b' zstyle ':vcs_info:*' actionformats '[%s]%b|%a' RPROMPT="%1(v|%1v|)" local _pre='' preexec() { _pre="$1" } precmd() { _r=$? case "${_pre}" in cd*|svn\ up*|svn\ sw*) psvar=() if test -d .svn then LANG=en_US.UTF-8 vcs_info [[ -n "$vcs_info_msg_0_" ]] && psvar[1]="$vcs_info_msg_0_" fi ;; esac return ${_r} } # autoload -Uz vcs_info # zstyle ':vcs_info:*' branchformat '%b:r%r' # zstyle ':vcs_info:*' formats '[%s]%b' # zstyle ':vcs_info:*' actionformats '[%s]%b|%a' # RPROMPT="%1(v|%1v|)" # chpwd() { # if test -d .svn # ここ適当に変更してちょ # then # psvar=() # LANG=en_US.UTF-8 vcs_info # [[ -n "$vcs_info_msg_0_" ]] && psvar[1]="$vcs_info_msg_0_" # fi # } # # precmdでは何もしない
とりあえず色も白でいいので、色設定は外しておいた