Ya has encontrado zle-keymap-selectcuál se ejecuta cada vez que cambia el modo. Puede usarlo para configurar algún otro indicador visual que no sea el indicador, según lo que su terminal lo admita (y su gusto en la pantalla del indicador de modo, por supuesto).
Hay una capacidad estándar de terminfo para cambiar la forma del cursor. Sin embargo, algunos terminales muestran el mismo cursor en ambos modos. La noción de Xterm de un cursor menos visible es hacer que parpadee (y esto debe habilitarse con el -bcargumento o cursorBlinkrecurso de la línea de comando ).
zle-keymap-select () {
case $KEYMAP in
vicmd) print -rn -- $terminfo[cvvis];; # block cursor
viins|main) print -rn -- $terminfo[cnorm];; # less visible cursor
esac
}
Con algunos terminales, también puede cambiar el color del cursor con print -n '\e]12;pink\a'(por nombre de color) o print -n '\e]12;#abcdef\a'(por especificación RGB). Estas secuencias se describen en la documentación de xterm, en el ctlseqsarchivo; Los emuladores de terminal modernos suelen emular xterm, aunque es posible que no admitan todas sus características.
CTRL+Cmientras está en modo vi-command, la solicitud se reiniciará, pero indicará que está en modo comando cuando realmente esté en modo insert.zle-line-initsiempre debe cambiar el indicador al modo de inserción. Por alguna razón,$KEYMAPno se actualiza correctamente cuando se llama a zle-line-init.