zsh で普段は bindkey -e だけど突発的にここで20文字右に行きたくなって bindkey -v だったら20lしてるのになあという貴方向けのキーバインド
bindkey-e-inline() {
zle vi-insert
local pos
pos=$CURSOR
zle push-line
bindkey -e
zle get-line
CURSOR=$pos
}
bindkey-v-inline() {
local pos
pos=$CURSOR
zle push-line
bindkey -v
zle get-line
zle vi-cmd-mode
CURSOR=$pos
}
zle -N bindkey-e-inline
bindkey -M viins "^e" bindkey-e-inline
bindkey -M vicmd "^e" bindkey-e-inline
zle -N bindkey-v-inline
bindkey "^xv" bindkey-v-inline
bindkey -e の状態で C-x v
でカーソル位置そのままで bindkey -v を、 vi モードでは C-e
で同様に bindkey -e を発行する。
(実際のキーは適当に変更しましょう)