Shell

如何配置 ZSH 的 vi 模式以保持命令之間的狀態?

  • January 25, 2014

我知道如何將 ZSH 的預設行編輯器設置為使用類似 vi 的鍵綁定…

bindkeys -v

…甚至預設每個新提示都處於命令模式而不是預設插入 mod…

zle-line-init() { zle -K vicmd; }
zle -N zle-line-init

…而且大多數時候我更喜歡這種行為。但是,它使一些事情變得非常尷尬。例如,將多行命令粘貼到終端以立即執行幾乎是不可能的。

**如何配置它以使模式保持不變?**我希望我執行一行時的任何模式都應該是下一行的預設模式。

也許像:

vicmd-accept() { prev_mode=vicmd; zle .accept-line }
viins-accept() { prev_mode=viins; zle .accept-line }
zle-line-init() { zle -K ${prev_mode:-viins} }
zle -N viins-accept
zle -N vicmd-accept
zle -N zle-line-init
bindkey -M viins \\r viins-accept
bindkey -M vicmd \\r vicmd-accept

或者更簡單:

accept-line() { prev_mode=$KEYMAP; zle .accept-line }
zle-line-init() { zle -K ${prev_mode:-viins} }
zle -N accept-line
zle -N zle-line-init

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