Режим vi не отображается корректно на новом терминале

Это продолжение моих предыдущих вопросов. В настоящее время у меня есть ~/.zsh.d/functions.sh

 function zle-line-init zle-keymap-select { psvar[1]="${${KEYMAP/vicmd/}/(main|viins)/-- INSERT --}" zle reset-prompt } precmd() { psvar[2]=() vcs_info [[ -n $vcs_info_msg_0_ ]] && psvar[2]="$vcs_info_msg_0_" } 

и соответствующие разделы из моего ~/.zshrc

 if [ -d ~/.zsh.d ]; then for i in ~/.zsh.d/*; do if [ -r $i ]; then source $i fi done unset i fi zle -N zle-line-init zle -N zle-keymap-select autoload -Uz colors && colors autoload -Uz vcs_info zstyle ':vcs_info:*' enable git zstyle ':vcs_info:*' formats '[%b]' zstyle ':vcs_info:*' branchformats '[%b|%r]' zstyle ':vcs_info:*' actionformats '[%b|%a]' # 063 is a blue # vimode implentation psvar[1]='-- INSERT --' local down=$terminfo[cud1]$terminfo[cuu1]$terminfo[sc]$terminfo[cud1] local mode="%F{063}%1 %(1v.%1v.)%f" local up=$terminfo[rc] local vimode=$down$mode$up # current working directory as blue local cwd='%F{063}%1~%f' # display git branch if git repo local git='%(2v.%F{099}%2v%f.)' # if root then red # else blue % local prompt_char='%(!.%F{red}%#%f.%F{063}%#%f)' PS1=$'%{$vimode%} $cwd $git $prompt_char ' RPS1='%m' preexec () { print -rn -- $terminfo[el]; } 

Это работает правильно, за исключением того, что он не отображается -- INSERT -- при первом запуске оболочки, после чего он работает так, как ожидалось.

Другие предложения по улучшению приветствуются.

Обновление Я решил решить проблему, хотя я до сих пор не знаю, почему она работает. На данный момент я установил psvar[1] в -- INSERT -- из коробки, так как я знаю, что он будет вставляться при запуске. Однако это не похоже на правильное разрешение.

В моем хакере, кажется, я исправил его, установив

 psvar[1]='-- INSERT --' 

прежде чем делать что-либо еще с моим vimode … Я не уверен, что на 100% доволен своим решением, но он работает.