diff options
Diffstat (limited to '.oh-my-zsh/plugins/vi-mode/vi-mode.plugin.zsh')
-rw-r--r-- | .oh-my-zsh/plugins/vi-mode/vi-mode.plugin.zsh | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/.oh-my-zsh/plugins/vi-mode/vi-mode.plugin.zsh b/.oh-my-zsh/plugins/vi-mode/vi-mode.plugin.zsh new file mode 100644 index 0000000..9396459 --- /dev/null +++ b/.oh-my-zsh/plugins/vi-mode/vi-mode.plugin.zsh @@ -0,0 +1,50 @@ +# Updates editor information when the keymap changes. +function zle-keymap-select() { + zle reset-prompt + zle -R +} + +# Ensure that the prompt is redrawn when the terminal size changes. +TRAPWINCH() { + zle && { zle -R; zle reset-prompt } +} + +zle -N zle-keymap-select +zle -N edit-command-line + + +bindkey -v + +# allow v to edit the command line (standard behaviour) +autoload -Uz edit-command-line +bindkey -M vicmd 'v' edit-command-line + +# allow ctrl-p, ctrl-n for navigate history (standard behaviour) +bindkey '^P' up-history +bindkey '^N' down-history + +# allow ctrl-h, ctrl-w, ctrl-? for char and word deletion (standard behaviour) +bindkey '^?' backward-delete-char +bindkey '^h' backward-delete-char +bindkey '^w' backward-kill-word + +# allow ctrl-r to perform backward search in history +bindkey '^r' history-incremental-search-backward + +# allow ctrl-a and ctrl-e to move to beginning/end of line +bindkey '^a' beginning-of-line +bindkey '^e' end-of-line + +# if mode indicator wasn't setup by theme, define default +if [[ "$MODE_INDICATOR" == "" ]]; then + MODE_INDICATOR="%{$fg_bold[red]%}<%{$fg[red]%}<<%{$reset_color%}" +fi + +function vi_mode_prompt_info() { + echo "${${KEYMAP/vicmd/$MODE_INDICATOR}/(main|viins)/}" +} + +# define right prompt, if it wasn't defined by a theme +if [[ "$RPS1" == "" && "$RPROMPT" == "" ]]; then + RPS1='$(vi_mode_prompt_info)' +fi |