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 .