благодаря вашему вопросу я, наконец, сделал некоторое чтение и увеличил свое понимание, ура!
итак, очень хорошим источником информации является man readline
. Привязки клавиш, указанные в различных inputrc
файлы контролируют работу библиотеки bash readline. В соответствии с 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
так что я рекомендую размещение Привязок там.
если вы хотите использовать обычные клавиши с буквами (например управления -g),Control-g: forward-word
работает нормально. Клавиши со стрелками сложнее. Я пытался и не смог найти ключ имя для клавиш со стрелками. Ни один из них я не пробовал (left-arrow
,left
,:left
) работал, так что кажется, что мы застряли с escape-последовательностей.
к сожалению, точной последовательности отличается от эмуляторов терминала (вот почему ваш Ubuntu inputrc имел несколько строк). Чтобы узнать, какую escape-последовательность использует ваш любимый терминал, запустите read
и затем введите последовательность клавиш, которая вас интересует. В terminator
,xterm
и gnome-terminal
,управления -левый дать:
$ read
^[[1;5D
in aterm
:
$ read
^[Od <-- that is a capital O not a zero (0).
поэкспериментировав немного, я понял, что ^[[D
is левый и ^[[1;5D
is управления -левый. Первый ^[
- это Esc ключ, используемый здесь, я полагаю, для обозначения последовательность.
в любом случае, чтобы связать управления -левый to forward-word
в пути, который работает для всех, я добавил Эти строки в мой ~/inputrc
:
"\e[1;5D": backward-word
"\eOd": backward-word
по причинам, которые я не до конца понял,управления представлен \e
, который должны be Esc.
мой финал ~/.inputrc
файл, который работает для всех терминалов, перечисленных выше:
"\e[1;5D": backward-word
"\eOd": backward-word
"\e[1;5C": forward-word
"\eOc": forward-word