Благодаря вашему вопросу я наконец-то прочитал и расширил понимание, ура!
Таким образом, очень хорошим источником информации является man readline
. Привязки клавиш, указанные в различных файлах inputrc
управляют работой библиотеки чтения строк BASH. В соответствии с man-страницей readline вы можете использовать либо символические имена клавиш, либо escape-последовательности:
Key Bindings
The syntax for controlling key bindings in the inputrc file is
simple. All that is required is the name of the command or
the text of a macro and a key sequence to which it should be
bound. The name may be specified in one of two ways: as a sym‐
bolic key name, possibly with Meta- or Control- prefixes, or
as a key sequence. The name and key sequence are separated by
a colon. There can be no whitespace between the name and the
colon.
When using the form keyname:function-name or macro, keyname is
the name of a key spelled out in English. For example:
Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> output"
На странице man также указано, что файл конфигурации по умолчанию - ~/.inputrc
поэтому я рекомендую разместить там свои привязки.
Если вы хотите использовать обычные буквенные клавиши (например, Control - g), Control-g: forward-word
работает нормально. Клавиши со стрелками сложнее. Я попытался и не смог найти название клавиши для клавиш со стрелками. Ни один из тех, которые я пробовал (left-arrow
, left
:left
), не сработал, поэтому кажется, что мы застряли с escape-последовательностями.
К сожалению, точная escape-последовательность отличается в эмуляторах терминала (вот почему ваш Ubuntu inputrc имел несколько строк). Чтобы выяснить, какую escape-последовательность использует ваш любимый терминал, запустите read
а затем введите интересующую вас последовательность клавиш. В terminator
, xterm
и gnome-terminal
, Control - Left дают:
$ read
^[[1;5D
в aterm
:
$ read
^[Od <-- that is a capital O not a zero (0).
Немного поэкспериментировав, я понял, что ^[[D
- слева, а ^[[1;5D
- это управление - слева). Первая ^[
- это клавиша Esc , используемая здесь, я полагаю, для обозначения escape-последовательности.
В любом случае, чтобы связать Control - слева forward-word
таким образом, чтобы это работало для всех, я добавил эти строки в мой ~/inputrc
:
"\e[1;5D": backward-word
"\eOd": backward-word
По причинам, которые я не до конца понял, Control представлен символом \e
который должен быть Esc.
Мой последний файл ~/.inputrc
который работает для всех терминалов, перечисленных выше:
"\e[1;5D": backward-word
"\eOd": backward-word
"\e[1;5C": forward-word
"\eOc": forward-word