Обратный код управления ищет терминалы

но zsh, по-видимому, думает, что я прошу файлы 2 - 5 (или что-то как этот) вместо файлов 2 - 57. Какие-либо мысли, почему?

Поскольку [] скобки указывают на список подобранных символов (который может быть цифрами), не числа, интерпретируемые математически. Такой шаблон подобран против отдельного символа. Список может содержать диапазоны, но цифр или букв. [2-57] соответствие расширяется до "Всех цифр в диапазоне от 2 до 5 и 7".

Для соответствия числам от 2 до 57 было бы легче использовать выражение последовательности вместо globbing шаблона (или вместе с таким):

for x in /foo/bar/*{2..57}; do print $x; done

Править: Но это, к сожалению, не даст Вам лексикографическое распоряжение всех перечисленных файлов - они были бы сгруппированы общими окончаниями числа, должными окружать расширение.

6
20.03.2017, 12:18
2 ответа

infocmp может помочь. Это пишет Escape как \E вместо \e или ^[.

Например, для нахождения \e[A, который является Вашим history-search-backward:

$ infocmp -1x | grep -F '=\E[A,'
       cuu1=\E[A,
$ man 5 terminfo | grep '  cuu1  '
       cursor_up                     cuu1       up       up one line

Который говорит Вам нажимать курсор, иначе стрелка вверх.

Обратите внимание, что Вам будет нужно -x флаг (показанный выше) для отображения некоторых комбинаций, например, Ctrl + <-.

Эти расширенные ключи не являются частью стандарта, таким образом, они не перечислены в terminfo странице справочника, но они документируются в terminfo файл.

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

Можно получить информацию о другом терминале при помощи infocmp -1x <terminal>, например. infocmp -1x rxvt, infocmp -1x putty, и т.д.

После того как Вы выясняете, какой terminfo думает, что Вы имеете, вещи будут легче при установке Вашего TERM переменная для соответствия.

7
27.01.2020, 20:27
  • 1
    infocmp не поможет, если Вы будете использовать комбинацию не в терминальном описании. –  Thomas Dickey 03.11.2016, 02:37

Функция cat - обычный способ сделать это, поскольку вы можете использовать ее, чтобы показать, что на самом деле отправляет ваша клавиатура. bash не использует какую-либо расширенную информацию в базе данных терминала (он использует подмножество обычных возможностей termcap).

Недостатком использования cat , конечно же, является определение того, является ли

^[[A

^ [ A или escape A (с учетом того, что bash предоставляет печатный \ e , представляющий escape-символ ).

На практике вы можете игнорировать первое: по сути, никто не отправляет три буквальных символа, «все» отправляют этот ^ [ как escape-символ ).

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

1
27.01.2020, 20:27

Теги

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