Ви вже знайшли, 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.