web-dev-qa-db-ja.com

viモードが新しい用語で正しく表示されない

これは myprevious の質問の続きです。私は現在~/.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 --が表示されず、その後は期待どおりに機能します。

他の改善提案を歓迎します。

Updateなぜそれが機能するのかまだわかりませんが、この問題を回避することにしました。今のところ、開始時に挿入されることがわかっているので、箱から出してpsvar[1]-- INSERT --に設定しました。しかし、これは適切な解決策のようには感じられません。

3
xenoterracide

私のハッカーでは、設定して修正したようです

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

私のvimodeで他のことをする前に...私は自分のソリューションに100%満足しているかどうかはわかりませんが、機能します。

1
xenoterracide