Ви вже знайшли, 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, підказка буде скинуто, але вкажіть, що ви знаходитесь в командному режимі, коли ви дійсно перебуваєте в режимі вставки.zle-line-initзавжди повинен змінювати індикатор, щоб вставити режим. Чомусь$KEYMAPне оновлюється належним чином, коли викликається zle-line-init.