A vi-mode plugin for Zsh.
- Different cursor depending on mode (Block in normal mode and Beam in insert mode). This feature might not work in all terminals.
- Helper function to display mode indicators in your prompt
- No preconfigured keybindings.
Recent versions of Zsh actually have sensible vi bindings by default.
If you feel the need to configure them anyways,
man zshzle
is your friend.
zplug "woefe/vi-mode.zsh"
Clone this repo or download the vi-mode.zsh file.
Then source it in your .zshrc
. For example:
mkdir -p ~/.zsh
git clone --depth=1 https://github.com/woefe/vi-mode.zsh ~/.zsh/vi-mode.zsh
echo "source ~/.zsh/vi-mode.zsh/vi-mode.zsh" >> .zshrc
Install vi-mode.zsh as described above.
Then use the vi_mode_status
function when setting your PROMPT
in .zshrc
.
Note the single quotes in the examples below.
If you do not use single quotes, the mode indicator will not update properly!
# Minimal Example
PROMPT='$(vi_mode_status)'
# Example with current path
PROMPT='%B%~%b $(vi_mode_status)'
# Example with github.com/woefe/git-prompt.zsh
PROMPT='%B%~%b $(gitprompt)$(vi_mode_status)'
The characters used for the mode indicators can be set via VI_NORMAL_MODE_INDICATOR
and VI_INSERT_MODE_INDICATOR
.
You can use prompt escapes in the mode indicators (see Section "SIMPLE PROMPT ESCAPES" of zshmisc
manpage).
The default values are:
VI_NORMAL_MODE_INDICATOR='%(?.%F{blue}•%f%F{cyan}•%f%F{green}•%f.%F{red}•••%f) '
VI_INSERT_MODE_INDICATOR='%(?.%F{blue}❯%f%F{cyan}❯%f%F{green}❯%f.%F{red}❯❯❯%f) '
Example: Mode indicator on the right
VI_NORMAL_MODE_INDICATOR=' %F{blue}-- NORMAL --%f'
VI_INSERT_MODE_INDICATOR=' %F{green}-- INSERT --%f'
PROMPT='%B%~%b %# '
RPROMPT='$(vi_mode_status)'
By default, the cursor changes depending on the current mode. This behavior can be disabled by setting
VI_MODE_KEEP_CURSOR=1