vi 모드가 새 학기에 올바르게 표시되지 않습니다.

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 --하지만 이는 적절한 해결책이 아닌 것 같습니다.

답변1

내 해킹에서는 설정으로 문제를 해결한 것 같습니다.

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

내 vimode로 다른 작업을 수행하기 전에... 내 솔루션에 100% 만족하는지 확신할 수 없지만 작동합니다.

관련 정보