Shell

使我的 zsh 提示在 vi 模式下顯示模式

  • December 29, 2021

我使用bindkey -v(對於 bash-ers set -o vi,我認為這也適用於 zsh)或 vi(m) 模式。但是讓我感到困擾的是,我沒有任何視覺提示可以告訴我我是處於插入模式還是命令模式。有誰知道如何讓我的提示顯示模式?

我通過SU找到了這個。這是基本範例,儘管我仍在為自己定制:

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,儘管它們可能不支持它的所有功能。

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