Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Fwd: In Vi mode, show whether "insert" or "command" state is active

On Dec 17,  2:13am, Jason Spiro wrote:
} ---------- Forwarded message ----------
} Zsh's Vi emulation does not show the user which mode is active.  This
} is frustrating and confusing.  (It's like an electric oven with no
} indicator to show whether the oven is on or off.)
} It would be very good if zsh, too, would show the user which mode was
} active.  You can do this any way you like.  I would like it if you did
} this by setting the cursor style, just as gVim does.

Check out this thread:


(Requires ZSH_VERSION > 5.0.3 to avoid an infinite loop bug.)

} Here is how to set the cursor style (in supported terminals):
} Set cursor to blinking bar:  echo -en "\e[5 q"
} Set cursor to blinking block:  echo -en "\e[1 q"

This should do it for you (note that I don't have a terminal that
supports the #5 cursor so this is only partly tested):

    zle-keymap-select() {
      case $KEYMAP in
      (vicmd) print -nR $'\e[5 q';;
      (viins) print -nR $'\e[1 q';;
      (*) print -nR $'\e[2 q';;
    zle -N zle-keymap-select

You will also need to run zle-keymap-select from zle-line-init to
set up the cursor properly on entry to the editor.

} The above commands definitely work in recent versions of iTerm2 (for
} Mac OS) and xterm.  I haven't tested them in any other terminal
} emulators.  Surely some terminal emulators do nothing at all in
} response to the above control sequences.

Gnome-terminal displays garbage characters, so this is not something
one can do in general.  As far as I can tell even gVim does not have
this feature built in, you have to supply some .vimrc coding.

Messages sorted by: Reverse Date, Date, Thread, Author