zsh の vcs_info が神!のごとく重かったのですが…

Cygwin1.7.1,zsh4.3.9の環境でやったら糞重かった。cdする度に引っかかる。なので、
PWDが変わったときに」「PWDがバージョン管理下にある場合のみ」vcs_infoを実行するようにした。
もちろんこうしてしまうと、svn upとかしても表示が変わらないことになる。
まあその辺は手作業でchpwdするとかcd .するとか適当にやって。

頂いたコメントも踏まえて(今のところSubversion専用に)書き換えました。
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では何もしない

とりあえず色も白でいいので、色設定は外しておいた