Você já encontrou o zle-keymap-select
que é executado sempre que o modo muda. Você pode usá-lo para definir outro indicador visual que não seja o prompt, dependendo do suporte do seu terminal (e do seu gosto no visor do indicador de modo, é claro).
Existe um recurso padrão terminfo para alterar a forma do cursor. No entanto, alguns terminais exibem o mesmo cursor nos dois modos. A noção do Xterm de um cursor menos visível é fazê-lo piscar (e isso deve ser ativado com o -bc
argumento ou cursorBlink
recurso da linha 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
}
Em alguns terminais, você também pode alterar a cor do cursor com print -n '\e]12;pink\a'
(por nome da cor) ou print -n '\e]12;#abcdef\a'
(por especificação RGB). Essas sequências são descritas na documentação do xterm, no ctlseqs
arquivo; emuladores de terminal modernos normalmente emulam o xterm, embora possam não suportar todos os seus recursos.
CTRL+C
no modo vi-command, o prompt será redefinido, mas indicará que você está no modo de comando quando estiver realmente no modo de inserção.zle-line-init
deve sempre mudar o indicador para inserir o modo. Por algum motivo,$KEYMAP
não é atualizado corretamente quando o zle-line-init é chamado.