ZSH+gnome-terminal и режим ввода VI: Показать ibeam или заблокировать курсор

ZSH+gnome-terminal и режим ввода VI: Показать ibeam или заблокировать курсор

Существуют различные методыдля отображения того, находитесь ли вы в режиме вставки или в обычном режиме при использовании привязки клавиш VI в ZSH.

Gnome-терминал такжепозволяет вам изменить курсориз блока в ibeam |с вызовом gconftool-2.

Как мне объединить эти два устройства, чтобы ibeam находился в режиме вставки, а блок — в обычном режиме?

решение1

Помещая оба ответа, данные в вопросе[1,2] вместе, я получаю это:

function zle-line-init zle-keymap-select {
    if [[ $KEYMAP == vicmd ]]; then
       gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape block
    elif [[ $KEYMAP == (main|viins) ]]; then
       gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam
    fi
}
zle -N zle-line-init
zle -N zle-keymap-select

Разница в том, что я проверяю $KEYMAPпараметр напрямую с помощью if..fiпредложения и выполняю gconftool-2команду, а не изменяю приглашение.

решение2

В последних версиях gnome-terminal для изменения курсора можно использовать следующие escape-последовательности:

  • \e[0 qили \e[ q: сбросить настройки до значений, определенных в настройках профиля
  • \e[1 q: мигающий блок
  • \e[2 q: устойчивый блок
  • \e[3 q: мигающее подчеркивание
  • \e[4 q: ровное подчеркивание
  • \e[5 q: мигающий I-образный луч
  • \e[6 q: устойчивая двутавровая балка

Вы можете распечатать их, например echo -ne '\e[5 q', . Подключите их к вашей конфигурации zsh, как показано в ответе mpy.

Связанный контент