Интерпретировать 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 для той же цели), которая интерпретирует некоторые последовательности для перемещения по строке ввода и выполнения действий редактирования.
Следующие тексты должны предоставить более подробную информацию.
Статья в Википедии о escape-последовательностях
а также
Мой ответ для современных читателей в 2021 году, использующих MacOSX с zsh Termnial по умолчанию :
- Запустите терминал, нажмите ⌘+ , ,чтобы открыть настройки .
- Выберите «Профили » > вкладка « Клавиатура », вот и все ваши сопоставления.