установка `xterm-keys` в` tmux` влияет на Shift-Enter в `vim`

Выполните эту команду:

LESS=+/'^ *IFS *The' man bash

Чтобы прочитать («выделено мной»):

IFS
Внутренний разделитель полей, который используется для разделения слов после раскрытия и для разделения строк на слова с помощью встроенной команды чтения. Значение по умолчанию - ` '.

Это означает, что если расширение не произошло, разделение поля IFS также не произойдет.

На самом деле разделение происходит в исходной строке, но с фиксированным набором метасимволов | & ; ( ) > пробел табуляция

Запятая , не является метасимволом и не используется для разделения.

Седьмая глава этой книги содержит более подробную информацию об обработке командной строки:

  1. Разделяет команду на токены, разделенные фиксированным набором метасимволов: SPACE, TAB, NEWLINE,;, (,), , | и &. Типы токенов включают слова, ключевые слова, перенаправители ввода-вывода и точки с запятой.

  1. Берет части строки, полученные в результате подстановки параметра , команды и арифметической замены , и снова разделяет их на слова. На этот раз он использует символы в $ IFS в качестве разделителей вместо набора метасимволов на шаге 1.

0
22.05.2019, 01:12
1 ответ

Теперь вы используете F14½ клавиша .

Вы забрели в мир Гарри Поттера , где есть F14½ между клавишами F14 и Help на клавиатуре DEC VT. ВИМ не знаком с этим миром.

An LK401 keyboard

На клавиатуре DEC VT, такой как LK401 (для DEC VT420 )на рисунке, функциональные клавиши от F1 до F20 генерируют последовательности управления вводом (DECFNK )пронумерованы от 11 до 34. Дополнительные номера DECFNK соответствуют физическим промежуткам на клавиатуре, где на самом деле нет клавиш. Это вполне логично, если это осознать. (В дальнейшем чтении об этом будет намного больше. )В частности, F14 генерирует управляющую последовательность DECFNK 26, а Help генерирует управляющую последовательность DECFNK 28.

Если включить опцию modifyOtherkeysв XTerm, вместо создания более обычных последовательностей управления вводом для целой группы клавиш клавиатуры, при нажатии модификаторов XTerm генерирует целую кучу вариантов DECFNK 27, код для разрыв между F14 и Справка . Идея заключается в том, что программа TUI может различать различные измененные и немодифицированные варианты использования этих клавиш, чего она обычно делать не может.

Клавиша Enter , которая обычно генерирует & #x240d; в качестве входных данных, за исключением случаев, когда он генерирует & #x240a; при изменении и #x2388; Управление в этом режиме вместо этого генерирует DECFNK 27;2;13 при использовании в сочетании с & #x21e7; Shift и другие DECFNK 27; M ;13 последовательностей для других комбинаций модификаторов.

Опция xterm-keysв tmux заставляет tmux понимать все это. Он распознает эти управляющие последовательности как входные данные и отправляет их в качестве входных данных на мультиплексируемые терминалы.

Проблема в том, что очень немногие инструменты Unix и Linux правильно понимают эти управляющие последовательности. Для правильной обработки терминального ввода необходим синтаксический анализатор управляющей последовательности ECMA -48, который знает о промежуточных символах, символах параметров, конечных символах и так далее. Но программы (, включая оболочки ), использующие такие библиотеки, как libedit, ZLE и Readline; программы, использующие ncurses; и такие программы, как VIM, не имеют синтаксических анализаторов управляющей последовательности ECMA -48. (Опять же, об этом подробнее в дальнейшем чтении. )Они неправильно обрабатывают протокол терминала.

Вместо этого они имеют специальные -обработчики ввода, которые выполняют более -упрощенное сопоставление с образцом. Это означает, что они не могут справиться с последовательностями DECFNK в том виде, в котором они используются здесь XTerm и tmux.

DECFNK 27;2;13 в полном изложении представляет собой последовательность символов CSI27;2;13~. Использование 7-битных расширений кода -из ECMA -48 делает этот ESC[27;2;13~. VIM неправильно декодирует это как управляющую последовательность ECMA -48, неправильно понимает ввод терминала, а символы13~в конце управляющей последовательности в конечном итоге имеют эффект, который вы видите, преобразования заглавных букв 13 символов.

Дополнительная литература

5
28.01.2020, 02:22

Теги

Похожие вопросы