Как остановить отображение буквы «[A» иногда при нажатии клавиши со стрелкой вверх?

set -f— самый удобный способ разбиения поля без подстановки.

В bashвы можете проверить, установлен ли параметр оболочки, с помощью теста -o. Поэтому вы можете сделать это:

if [ ! -o noglob ]; then
    set -f
    trap 'set +f' RETURN
fi

Это обнаружит состояние noglobпараметра оболочки (длинное имя дляset -f). Если он не установлен, он устанавливается и ловушка RETURNустанавливается. Ловушка отключит параметр оболочки noglob, когда сценарий будет выполнен, , если источник сценария . Если сценарий не получен, ловушка ничего не сделает.

Интересное примечание :Сценарий с исходным кодом очень похож на функцию оболочки.

2
06.12.2020, 21:43
2 ответа

Последовательность на самом деле Escape [A , и она является частью набора, который был принят Ecma в 1976 году в качестве стандарта ECMA -48 , поддерживаемый ANSI как отдельный, но почти идентичный стандарт в течение ряда лет (, позже отозванный ), а также ратифицированный ISO/IEC 6429 в пути. Результатом этой множественной стандартизации является то, что, хотя на них часто ссылаются как на escape-коды ANSI, их следует правильно называть функциями управления ECMA -48*.

Обычная причина появления [Aна экране вместо действия заключается в том, что начальный код Escape был неожиданно поглощен. Я не могу воспроизвести это на своей клавиатуре, если сначала не нажму Ctrl V , что указывает драйверу терминальной строки обрабатывать следующий символ как литерал.

Итак, мы можем получить эту последовательность Ctrl VEscape [A , производя видимый вывод [A.

Вы заметите, что если вы нажмете последовательность символов Escape [A в быстрой последовательности, курсор действительно переместится вверх. Однако, если вы сделаете паузу после первого символа, вы не сможете получить движение курсора, потому что с символом Escape связан тайм-аут. На медленных последовательных линиях к системам UNIX это было настоящей проблемой, и ближайшим эквивалентом является медленное или прерывистое сетевое соединение с небольшой задержкой во время передачи этой последовательности.

Теперь к вашему вопросу, как предотвратить это. Вы мало что можете сделать, если у вас прерывистое сетевое соединение, за исключением, возможно, использования одной из альтернативных последовательностей, таких как Escapek ... k ... k , доступные при редактировании команды в "режиме vi"(set -o vi).


*Похоже, JavaScript следует называть ECMAScript, я полагаю

8
18.03.2021, 22:44

Все очень хорошие ответы. Быстро и грязно использовать h,j,k,l в качестве клавиш со стрелками. Или установите полный пакет vim. Дистрибутив Ubuntu, если я правильно помню, по умолчанию использует vim?? -среда выполнения, если просто установить vim?? то проблема "решается" сама собой. ?? независимо от последней версии полного пакета. На Ubuntu apt-cache search vimскажу вам.

h = вверх, j = вниз, k = влево, l = вправо

0
18.03.2021, 22:44

Теги

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