Интерпретировать zsh bindkey экранированные последовательности

Я обычно нахожу интересные настройки привязки клавиш Zsh (через bindkey команда) по всему интернету. Мой вопрос заключается в том, как мне интерпретировать то, на что эти экранированные последовательности отображаются? Например, вот фрагмент из связывания ключей oh-my-zsh.zsh

bindkey "^[[H" beginning-of-line
bindkey "^[[1~" beginning-of-line
bindkey "^[[F"  end-of-line
bindkey "^[[4~" end-of-line

Есть ли ссылка на то, как представлены эти раскладки клавиш? Кроме того, это специфично для zsh или для платформы?

Я знаю, что я могу использовать либо cat или Ctrl-V, чтобы найти соответствующую экранированную последовательность для определенных клавиш. Учитывая, что я мог бы грубо заставить найти обратное соответствие, но это не сработало бы для клавиш, которых нет на моей клавиатуре (например, Home/End на ноутбуках Mac). Таким образом, я бы предпочел методы, которые могли бы определять клавиши независимо от физической клавиатуры.

2 ответа

Решение

Если говорить о типичном потоке событий Unix/ Linux, картина примерно следующая.

Программа эмулятора терминала получает события X, такие как та или иная кнопка нажата, другая кнопка отпускается. Эти события можно отслеживать, например, с помощью утилиты xev. Затем эмулятор терминала преобразует эти события в escape-последовательности.

Этот перевод не установлен в камне. Это можно настроить. Разные эмуляторы терминала настроены по-разному. Например, перевод xterm может быть настроен в .Xdefaults так:

XTerm*VT100*Translations:#override \
Ctrl<Key>Left:          string(0x1B) string(OD) \n\
Ctrl<Key>Right:          string(0x1B) string(OC) \n\

Обратите внимание, 0x1B, который является ESC. ESC также печатается как ^ [.

Теперь zsh использует zle (и bash использует библиотеку readline для той же цели), которая интерпретирует некоторые последовательности для перемещения по строке ввода и выполнения действий редактирования.

Следующие тексты должны предоставить более подробную информацию.

Описание редактора Zsh Line

Статья в Википедии о escape-последовательностях

а также

Контрольные последовательности Xterm

Мой ответ для современных читателей в 2021 году, использующих MacOSX с zsh Termnial по умолчанию :

  1. Запустите терминал, нажмите + , ,чтобы открыть настройки .
  2. Выберите «Профили » > вкладка « Клавиатура », вот и все ваши сопоставления.

Другие вопросы по тегам