Обнаружение режима раскладки zsh для визуального режима Vi

#shell #zsh #vi #prompt

#оболочка #zsh #vi #запрос

Вопрос:

Zsh использует эту zle функцию для проверки состояния приглашения.

Существует KEYMAP переменная, которая должна содержать определенные значения в соответствии с используемым вами режимом Vi.

Он отлично работает для INSERT COMMAND режима и, но я не могу получить триггер для VISUAL режима.

Из руководства по Zsh:

18.2 Раскладки

Раскладка ключей в ZLE содержит набор привязок между последовательностями клавиш и командами ZLE. Невозможно привязать пустую последовательность клавиш.

В любое время может быть любое количество раскладки ключей, и у каждой раскладки ключей есть одно или несколько имен. Если удалить все имена раскладки, она исчезнет. bindkey можно использовать для управления именами раскладки.

Изначально существует восемь раскладки ключей:

эмуляция emacs EMACS

эмуляция viins vi — режим вставки

эмуляция vicmd vi — командный режим

эмуляция viopp vi — ожидание оператора

визуальная эмуляция vi — выбор активен

режим инкрементного поиска isearch

команда считывает имя команды

. безопасная резервная раскладка

Я попробовал следующее:

 function zle-keymap-select {
    echo $KEYMAP
}
zle -N zle-keymap-select
  

Но вывод продолжает меняться между vicmd и main , и когда я нажимаю v , чтобы войти в визуальный режим, вывода нет.

Комментарии:

1. Визуальный режим — это не отдельное состояние в zsh: оно определяется комбинацией установленной метки, активной области и командного режима vi. Вы можете изменять эти состояния независимо с помощью пользовательского виджета или с помощью виджетов emacs. viopp и visual используются только в качестве локальных расклад-карт, при этом vicmd остается выбранной раскладкой ключей. Это означает, что вам не нужно повторять много привязок в стиле vi для трех ключевых карт: привязки в vicmd являются общими, обратите внимание, как мало привязок содержат visual и viopp по сравнению с vicmd. Но это также означает, что они никогда не выбираются, вызывая обратный вызов.

2. Я использую это , чтобы получить расклад клавиш визуального режима под названием vivis. Может быть, это то, что вам нужно.

Ответ №1:

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

zsh-vi-mode: лучший и удобный плагин режима vi (vim) для ZSH.
https://github.com/jeffreytse/zsh-vi-mode

Этот плагин предоставил ZVM_MODE вам переменную для получения текущего режима vi и лучшего отображения индикатора.

И в настоящее время поддерживаются следующие режимы:

 ZVM_MODE_NORMAL
ZVM_MODE_INSERT
ZVM_MODE_VISUAL
ZVM_MODE_VISUAL_LINE
  

Для обновления индикатора режима vi мы должны добавить наши команды в zvm_after_select_vi_mode_commands . Например:

После установки этого плагина

 # The plugin will auto execute this `zvm_after_select_vi_mode` function
function zvm_after_select_vi_mode() {
  case $ZVM_MODE in
    $ZVM_MODE_NORMAL)
      # Something you want to do...
      ;;
    $ZVM_MODE_INSERT)
      # Something you want to do...
      ;;
    $ZVM_MODE_VISUAL)
      # Something you want to do...
      ;;
    $ZVM_MODE_VISUAL_LINE)
      # Something you want to do...
      ;;
  esac
}
  

Вот пример:

ДЕМОНСТРАЦИЯ