Shell

vi 模式在新學期無法正確顯示

  • January 19, 2012

這是 之前問題的延續。我目前有以下內容~/.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]; }

這工作正常,只是它在第一次啟動 shell 時不顯示-- INSERT --,之後它按預期工作。

歡迎提出其他改進建議。

更新我決定解決這個問題,但我仍然不知道它為什麼會起作用。現在我已經設置psvar[1]-- INSERT --開箱即用,因為我知道它將在開始時插入。不過,這感覺不是一個合適的解決方案。

在我的黑客中,我似乎通過設置修復了它

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

在用我的 vimode 做任何其他事情之前……我不確定我對我的解決方案是否 100% 滿意,但它可以正常工作。

引用自:https://unix.stackexchange.com/questions/1396