Díky vaší otázce jsem si konečně přečetl a zvýšil své porozumění, na zdraví!
Velmi dobrým zdrojem informací je tedy man readline
. Klávesové zkratky specifikované v různých inputrc
soubory řídí způsob, jakým knihovna readline BASH funguje. Podle manuálové stránky readline můžete použít buď symbolická jména klíčů, nebo escape sekvence:
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"
Manová stránka také uvádí, že výchozí konfigurační soubor je ~/.inputrc
takže doporučuji umístit vaše vázání tam.
Pokud chcete použít normální klávesy s písmeny (například Control -g ), Control-g: forward-word
funguje dobře. Klávesy se šipkami jsou těžší. Pokusil jsem se najít klíč name a nepodařilo se mi to pro klávesy se šipkami. Žádný z těch, které jsem zkoušel (left-arrow
, left
, :left
) fungoval, takže se zdá, že jsme uvízli v únikových sekvencích.
Bohužel přesná sekvence escape se mezi emulátory terminálu liší (proto měl váš inputrc Ubuntu více řádků). Chcete-li zjistit, jakou escape sekvenci používá váš oblíbený terminál, spusťte read
a poté zadejte sekvenci kláves, která vás zajímá. V terminator
, xterm
a gnome-terminal
, Ovládání -Vlevo dát:
$ read
^[[1;5D
v aterm
:
$ read
^[Od <-- that is a capital O not a zero (0).
Trochu experimentování jsem přišel na to, že ^[[D
je vlevo a ^[[1;5D
je Ovládací prvek -Vlevo . První ^[
je Esc klíč, který se zde používá, předpokládám, k označení únikové sekvence .
V každém případě svázat Control -Vlevo na forward-word
způsobem, který funguje pro všechny, jsem tyto řádky přidal do svého ~/inputrc
:
"\e[1;5D": backward-word
"\eOd": backward-word
Z důvodů, kterým plně nerozumím, Kontrola je reprezentován \e
které by měly být Esc .
Můj konečný ~/.inputrc
soubor, který funguje pro všechny výše uvedené terminály, je:
"\e[1;5D": backward-word
"\eOd": backward-word
"\e[1;5C": forward-word
"\eOc": forward-word