OS X Mavericks上でzshの動作が異常に遅くなる現象が起きました.
以下のgifのように,入力したコマンドの反映が追いつかない状況です.
.zshrcを始めとする設定ファイルはdotfilesとしてgitで管理していたので,ユーザ側の設定はOS X Mountain Lionで正常に動いていたときと全く同じです.
調査したところoh-my-zshのvi-modeプラグインの中で呼ばれているzle reset-prompt
の処理が原因であるとわかりました.
# $HOME/.oh-my-zsh/plugins/vi-mode/vi-mode.plugin.zsh function zle-keymap-select zle-line-init zle-line-finish { # The terminal must be in application mode when ZLE is active for $terminfo # values to be valid. if (( ${+terminfo[smkx]} )); then printf '%s' ${terminfo[smkx]} fi if (( ${+terminfo[rmkx]} )); then printf '%s' ${terminfo[rmkx]} fi zle reset-prompt # コマンド1行ごとに大きな遅延を起こしている zle -R } zle -N zle-line-init zle -N zle-line-finish zle -N zle-keymap-select
vi-modeプラグイン自体も正常に動作しておらず,vimのmodeに応じたインジケータが表示されなかったのでプラグインを.zshrcから外すことで解決としました.
なお oh-my-zsh内で''zle reset-prompt''が使われているのは2013年10月現在ではvi-modeプラグインのみでした.
$ ag reset-prompt $HOME/.oh-my-zsh plugins/vi-mode/vi-mode.plugin.zsh 13: # zle reset-prompt
プラグインを追加する際はご注意ください.