Skip to content
A vi-mode plugin for Zsh.
Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
LICENSE
README.md
vi-mode.plugin.zsh
vi-mode.zsh

README.md

vi-mode.zsh

A vi-mode plugin for Zsh.

(Non-)Features

  • 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.

Installation

zplug

zplug "woefe/vi-mode.zsh"

Manual

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

Configuration

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)'

Mode indicators

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)'

Cursor

By default, the cursor changes depending on the current mode. This behavior can be disabled by setting

VI_MODE_KEEP_CURSOR=1
You can’t perform that action at this time.