* Update VI_KEYMAP on zle-line-finish. Fixes next prompt draw. * Also fix vi-mode prompt redraw in case previous prompt was canceled * Do not redraw fix prompt if VI_MODE_RESET_PROMPT_ON_MODE_CHANGE is unset * Use a local variable instead of global in function
vi-mode plugin
This plugin increase vi-like zsh functionality.
To use it, add vi-mode to the plugins array in your zshrc file:
plugins=(... vi-mode)
Settings
-
VI_MODE_RESET_PROMPT_ON_MODE_CHANGE: controls whether the prompt is redrawn when switching to a different input mode. If this is unset, the mode indicator will not be updated when changing to a different mode. Set it totrueto enable it. For example:VI_MODE_RESET_PROMPT_ON_MODE_CHANGE=trueThe default value is unset, unless
vi_mode_prompt_infois used, in which case it'll automatically be set totrue. -
VI_MODE_SET_CURSOR: controls whether the cursor style is changed when switching to a different input mode. Set it totrueto enable it (default: unset):VI_MODE_SET_CURSOR=true -
MODE_INDICATOR: controls the string displayed when the shell is in normal mode. See Mode indicator for details.
Mode indicator
Normal mode is indicated with a red <<< mark at the right prompt, when it
hasn't been defined by theme.
You can change this indicator by setting the MODE_INDICATOR variable. This setting
supports Prompt Expansion sequences. For example:
MODE_INDICATOR="%F{yellow}+%f"
You can also use the vi_mode_prompt_info function in your prompt, which will display
this mode indicator.
Key bindings
Use ESC or CTRL-[ to enter Normal mode.
NOTE: some of these key bindings are set by zsh by default when using a vi-mode keymap.
History
ctrl-p: Previous command in historyctrl-n: Next command in history/: Search backward in historyn: Repeat the last/
Vim edition
vv: Edit current command line in Vim
NOTE: this used to be bound to v. That is now the default (visual-mode)
Movement
$: To the end of the line^: To the first non-blank character of the line0: To the first character of the linew: [count] words forwardW: [count] WORDS forwarde: Forward to the end of word [count] inclusiveE: Forward to the end of WORD [count] inclusiveb: [count] words backwardB: [count] WORDS backwardt{char}: Till before [count]'th occurrence of {char} to the rightT{char}: Till before [count]'th occurrence of {char} to the leftf{char}: To [count]'th occurrence of {char} to the rightF{char}: To [count]'th occurrence of {char} to the left;: Repeat latest f, t, F or T [count] times,: Repeat latest f, t, F or T in opposite direction
Insertion
i: Insert text before the cursorI: Insert text before the first character in the linea: Append text after the cursorA: Append text at the end of the lineo: Insert new command line below the current oneO: Insert new command line above the current one
Delete and Insert
ctrl-h: While in Insert mode: delete character before the cursorctrl-w: While in Insert mode: delete word before the cursord{motion}: Delete text that {motion} moves overdd: Delete lineD: Delete characters under the cursor until the end of the linec{motion}: Delete {motion} text and start insertcc: Delete line and start insertC: Delete to the end of the line and start insertr{char}: Replace the character under the cursor with {char}R: Enter replace mode: Each character replaces existing onex: Deletecountcharacters under and after the cursorX: Deletecountcharacters before the cursor