This is my attempt at bringing emacs-style keybindings to vi mode in ZSH:
# VI MODE KEYBINDINGS (ins mode)
bindkey -M viins '^a' beginning-of-line
bindkey -M viins '^e' end-of-line
bindkey -M viins '^k' kill-line
bindkey -M viins '^r' history-incremental-pattern-search-backward
bindkey -M viins '^s' history-incremental-pattern-search-forward
bindkey -M viins '^p' up-line-or-history
bindkey -M viins '^n' down-line-or-history
bindkey -M viins '^y' yank
bindkey -M viins '^w' backward-kill-word
bindkey -M viins '^u' backward-kill-line
bindkey -M viins '^h' backward-delete-char
bindkey -M viins '^?' backward-delete-char
bindkey -M viins '^_' undo
bindkey -M viins '^x^r' redisplay
bindkey -M viins '\eOH' beginning-of-line # Home
bindkey -M viins '\eOF' end-of-line # End
bindkey -M viins '\e[2~' overwrite-mode # Insert
bindkey -M viins '\ef' forward-word # Alt-f
bindkey -M viins '\eb' backward-word # Alt-b
bindkey -M viins '\ed' kill-word # Alt-d
# VI MODE KEYBINDINGS (cmd mode)
bindkey -M vicmd '^a' beginning-of-line
bindkey -M vicmd '^e' end-of-line
bindkey -M vicmd '^k' kill-line
bindkey -M vicmd '^r' history-incremental-pattern-search-backward
bindkey -M vicmd '^s' history-incremental-pattern-search-forward
bindkey -M vicmd '^p' up-line-or-history
bindkey -M vicmd '^n' down-line-or-history
bindkey -M vicmd '^y' yank
bindkey -M vicmd '^w' backward-kill-word
bindkey -M vicmd '^u' backward-kill-line
bindkey -M vicmd '/' vi-history-search-forward
bindkey -M vicmd '?' vi-history-search-backward
bindkey -M vicmd '^_' undo
bindkey -M vicmd '\ef' forward-word # Alt-f
bindkey -M vicmd '\eb' backward-word # Alt-b
bindkey -M vicmd '\ed' kill-word # Alt-d
bindkey -M vicmd '\e[5~' history-beginning-search-backward # PageUp
bindkey -M vicmd '\e[6~' history-beginning-search-forward # PageDown
You know, so that your muscle memory can rest in peace. Also see the commit adding the above emacs style keybindings to my dotfiles.
This helped me, thanks. I originally chose zsh because of the bugginess in bash vi mode, but I gave zsh vi mode up because I wanted emacs style keys even more (history search, beginning and end of line) and was too lazy to come up with a comprehesive list. This allows the best of both worlds.
@Jerry: No problem. What I’m currently struggling with is having the same workarounds work with Readline apps:
http://superuser.com/questions/486752/how-to-bind-up-arrow-in-inputrc-readline-for-vim-insert-mode
thanks a lot!!!!!