Shell
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]; }
這工作正常,只是它在第一次啟動 shell 時不顯示
-- INSERT --
,之後它按預期工作。歡迎提出其他改進建議。
更新我決定解決這個問題,但我仍然不知道它為什麼會起作用。現在我已經設置
psvar[1]
為-- INSERT --
開箱即用,因為我知道它將在開始時插入。不過,這感覺不是一個合適的解決方案。
在我的黑客中,我似乎通過設置修復了它
psvar[1]='-- INSERT --'
在用我的 vimode 做任何其他事情之前……我不確定我對我的解決方案是否 100% 滿意,但它可以正常工作。