summaryrefslogtreecommitdiff
path: root/plugins/vi-mode
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/vi-mode')
-rw-r--r--plugins/vi-mode/vi-mode.plugin.zsh21
1 files changed, 20 insertions, 1 deletions
diff --git a/plugins/vi-mode/vi-mode.plugin.zsh b/plugins/vi-mode/vi-mode.plugin.zsh
index c47ab7211..3ed32b3fb 100644
--- a/plugins/vi-mode/vi-mode.plugin.zsh
+++ b/plugins/vi-mode/vi-mode.plugin.zsh
@@ -1,12 +1,31 @@
-function zle-line-init zle-keymap-select {
+# Ensures that $terminfo values are valid and updates editor information when
+# the keymap changes.
+function zle-keymap-select zle-line-init zle-line-finish {
+ # The terminal must be in application mode when ZLE is active for $terminfo
+ # values to be valid.
+ if (( ${+terminfo[smkx]} )); then
+ printf '%s' ${terminfo[smkx]}
+ fi
+ if (( ${+terminfo[rmkx]} )); then
+ printf '%s' ${terminfo[rmkx]}
+ fi
+
zle reset-prompt
+ zle -R
}
zle -N zle-line-init
+zle -N zle-line-finish
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
+
# if mode indicator wasn't setup by theme, define default
if [[ "$MODE_INDICATOR" == "" ]]; then
MODE_INDICATOR="%{$fg_bold[red]%}<%{$fg[red]%}<<%{$reset_color%}"