Shell
使我的 zsh 提示在 vi 模式下顯示模式
我使用
bindkey -v
(對於 bash-ersset -o vi
,我認為這也適用於 zsh)或 vi(m) 模式。但是讓我感到困擾的是,我沒有任何視覺提示可以告訴我我是處於插入模式還是命令模式。有誰知道如何讓我的提示顯示模式?
function zle-line-init zle-keymap-select { RPS1="${${KEYMAP/vicmd/-- NORMAL --}/(main|viins)/-- INSERT --}" RPS2=$RPS1 zle reset-prompt } zle -N zle-line-init zle -N zle-keymap-select
我會解釋它,但我還沒有真正理解它
您已經找到
zle-keymap-select
了在模式更改時執行的操作。您可以使用它來設置提示以外的其他視覺指示器,具體取決於您的終端支持的內容(當然還有您對模式指示器顯示的品味)。有一個標準的terminfo 功能可以改變游標的形狀。然而,一些終端在兩種模式下都顯示相同的游標。Xterm 的不太明顯游標的概念是讓它閃爍(這必須通過
-bc
命令行參數或cursorBlink
資源啟用)。zle-keymap-select () { case $KEYMAP in vicmd) print -rn -- $terminfo[cvvis];; # block cursor viins|main) print -rn -- $terminfo[cnorm];; # less visible cursor esac }
對於某些終端,您還可以使用
print -n '\e]12;pink\a'
(按顏色名稱)或print -n '\e]12;#abcdef\a'
(按 RGB 規範)更改游標顏色。這些序列在文件中的 xterm 文件中進行了描述ctlseqs
;現代終端模擬器通常模擬 xterm,儘管它們可能不支持它的所有功能。