Вы уже нашли, zle-keymap-select
что выполняется при изменении режима. Вы можете использовать его для установки какого-либо другого визуального индикатора, отличного от приглашения, в зависимости от того, что ваш терминал поддерживает (и, конечно, ваш вкус в отображении индикатора режима).
Существует стандартная возможность terminfo для изменения формы курсора. Однако некоторые терминалы отображают один и тот же курсор в обоих режимах. Идея Xterm о менее видимом курсоре состоит в том, чтобы заставить его мигать (и это должно быть включено с помощью -bc
аргумента командной строки или cursorBlink
ресурса).
zle-keymap-select () {
case $KEYMAP in
vicmd) print -rn -- $terminfo[cvvis];; # block cursor
viins|main) print -rn -- $terminfo[cnorm];; # less visible cursor
esac
}
С некоторыми терминалами вы также можете изменить цвет курсора с помощью print -n '\e]12;pink\a'
(по названию цвета) или print -n '\e]12;#abcdef\a'
(по спецификации RGB). Эти последовательности описаны в документации xterm, в ctlseqs
файле; современные эмуляторы терминала обычно эмулируют xterm, хотя они могут не поддерживать все его функции.
CTRL+C
в режиме vi-command, запрос будет сброшен, но при этом вы увидите, что вы находитесь в командном режиме, когда вы действительно находитесь в режиме вставки.zle-line-init
всегда следует менять индикатор на режим вставки. По какой-то причине$KEYMAP
не обновляется должным образом при вызове zle-line-init.