3

Я только начал использовать Zsh, и я настраиваю несколько вещей. Я выбрал привязки vi, так как я более знаком с ними. Как и многие люди до меня, я вскоре обнаружил, что было бы полезно иметь некоторую визуальную подсказку о режиме vi, в котором я нахожусь, прежде чем я начну печатать.

Просматривая различные места, я нашел несколько, которые вставляют тот или иной текст в подсказку. Я попытался адаптировать один из них, чтобы использовать другой цвет для моего приглашения вместо добавления текста. Вот соответствующий код:

setopt PROMPT_SUBST

VIMODE="$fg[red]"
function zle-line-init zle-keymap-select {
    VIMODE="${${KEYMAP/vicmd/$fg[green]}/(main|viins)/$fg[red]}"
    zle reset-prompt
}

zle -N zle-line-init zle-keymap-select

PROMPT='%{${VIMODE}%}%#%{$reset_color%} '

Это получило бы цветовую директиву внутри переменной $ {VIMODE}: красный, если он на вставке, зеленый, если он на cmd. Он работает и корректно обновляет цвет до сих пор для всех изменений режима, которые я использовал (заглавные C или A, i, a).

Но после выполнения команды приглашение становится белым, пока я не начну что-то печатать (затем оно станет красным). Очистка экрана через ^ L делает его правильно перерисовывать.

Может кто-нибудь проверить это и сказать мне, где я делаю что-то не так? Я уверен, что есть и лучший способ условно изменить цвет, чем передавать его через переменную.

Заранее спасибо!

Редактировать:

Что-то действительно странное происходит, и я не понимаю этого. Мне пришлось перезагрузить компьютер, и когда я открыл терминал, приглашение перестало менять цвета между изменениями режима.

Я достал виджет zle-line-init и источник .zshrc и, как ни странно, он не только снова работает, но и первоначальная проблема (белый запрос после команды) исчезла .

Так что это текущее состояние дел, и я не уверен, произойдет ли это снова или нет.

VIMODE="$fg[red]"

function zle-keymap-select {
    VIMODE="${${KEYMAP/vicmd/$fg[green]}/(main|viins)/$fg[red]}"
    zle reset-prompt
}

zle -N zle-keymap-select

Кто-нибудь знает, что могло быть причиной этого?

Изначально я не перезагружал терминал, а просто загрузил .zshrc, чтобы загрузить все. Может ли что-то иметь побочные эффекты из-за этого?

Благодарю.

0