V tmux 2.0 stačí přidat tyto 2 řádky do .tmux.conf
:
bind -n End send-key C-e
bind -n Home send-key C-a
Zdá se, že hlavní problém je s použitím xterm-256color pro $TERM. Přepnul jsem $TERM na screen-256color a problém zmizel.
Pokud chcete z nějakého důvodu zůstat u xterm-256color v tmux - použijte řešení arch s inputrc. Testoval jsem to v tmux s rxvt, ruby irb, python, lua a klíče home/end jsou v pořádku. Pravděpodobně každá readline aplikace bude v pořádku.
Z wiki arch:
Nejdříve:
Nenastavujte $TERM ručně – nechte to udělat terminál.
Mnoho aplikací příkazového řádku používá ke čtení vstupu knihovnu Readline. Správná konfigurace Readline tedy může v mnoha případech opravit Home a End.
výchozí soubor /etc/inputrc neobsahuje mapování pro klíče home/end.
Chcete-li zkontrolovat, jaká je emitovaná sekvence escape pro tyto klíče:
1. Ctrl + V
2. Home
3. Spacebar
4. Ctrl + V
5. End
toto se pravděpodobně vytiskne:$ ^[[1~ ^[[4~
. Takže musíte přidat mapování pro tyto sekvence do vašeho inputrc (/etc/inputrc bude globálně, nebo pouze pro vašeho uživatele ~/.inputrc):
"\e[1~": beginning-of-line
"\e[4~": end-of-line
Přidejte do .tmux.conf
následující :
bind-key -n Home send Escape "OH"
bind-key -n End send Escape "OF"
A máte hotovo!
Vysvětlení
Po vyzkoušení každého z nich a několika dalších, které jsem viděl při procházení dalších odpovědí a dokumentace, mi to nakonec fungovalo ve všech scénářích, které jsem na to hodil. Nemohu vám slíbit totéž, protože každý má jiné scénáře, ale skončil jsem s tímto.
To bylo objeveno po zavedení stejného pokusu / omylu a logiky z poněkud relevantního článku, který již není k dispozici. Klíčem je, kde k překladu dochází; v mém případě se to stane v rámci mého .tmux.conf
, spíše než .bashrc
nebo .zshrc
(hlavně proto, že můj domov/konec fungoval dobře mimo tmux
)
Ladění
Tento problém můžete odladit pomocí cat -v
.
Spusťte cat -v
a poté stiskněte Domů a Konec klíče. Ukončete pomocí Ctrl +C .
$ cat -v
Zde je návod, jak můj výstup vypadal v rámci tmux using zsh
, zsh
a bash
:
tmux
➜ ~ cat -v
^[[1~^[[4~^C
zsh
➜ ~ cat -v
^[[H^[[F
bash
bash-3.2$ cat -v
^[[H^[[F
Řešení
Porovnejte výše uvedené příklady s tím, co očekáváme, spárováním tput
s cat -v
:
$ tput khome | cat -v; echo
^[OH
$ tput kend | cat -v; echo
^[OF
Závěr
Protože tento problém existuje pouze v rámci tmux
, a nikoli v samotných shellech, rozhodl jsem se místo toho provést změny vazby v konfiguraci tmux. Pomocí bind-key
spárováno s send
, můžeme použít Escape
klíčové slovo spárované se sekvencí, kterou chceme dosáhnout našeho překladu. Tedy:
bind-key -n NAME_OF_KEY send Escape SEQUENCE_GOES_HERE
Tento proces ladění a řešení lze použít na jakékoli jiné klíčové problémy s překladem. Ale moc se nezblázni. Některé klíče jsou z nějakého důvodu namapovány na určité escape sekvence. Všimněte si, jak bash
a zsh
obdržel ^[[H
sekvence pro Home místo ^[OH
; pravděpodobně se nedoporučuje, abychom toto přepisovali v našem .zshrc
pokud s tím nemáme velké problémy v zsh
.