Vim mode: change cursor shape based on mode (block for Normal, bar for Insert)

Resolved 💬 3 comments Opened Feb 14, 2026 by huangdawei Closed Feb 14, 2026

Feature Request

When using vim mode, the cursor shape stays as a block in both Normal and Insert modes, making it difficult to tell which mode you're currently in.

Expected Behavior

The cursor shape should change based on the current vim mode, similar to how terminal-based vim/neovim works:

  • Normal mode: Block cursor
  • Insert mode: Bar/line cursor |
  • Visual mode: Underline cursor _ (optional)

This can be achieved by emitting standard ANSI escape sequences when switching modes:

\e[1 q  → blinking block
\e[2 q  → steady block
\e[3 q  → blinking underline
\e[4 q  → steady underline
\e[5 q  → blinking bar
\e[6 q  → steady bar

Most modern terminals (iTerm2, Alacritty, Kitty, WezTerm, Windows Terminal, etc.) support these sequences.

Current Behavior

The cursor remains a block shape regardless of the vim mode. The only way to distinguish modes is by reading the small mode indicator text in the status area, which is not as immediate or intuitive as a cursor shape change.

Why This Matters

Cursor shape is the primary visual cue that vim users rely on to identify the current mode at a glance. Without it, users frequently type commands in insert mode or try to type text in normal mode.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗