GNU/Linux >> Znalost Linux >  >> Linux

Klávesy Home/End v tmux nefungují

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 .


Linux
  1. Linux Setuid nefunguje?

  2. Jak funguje cat << EOF v bash?

  3. Chyba libevent nenalezena v tmux

  1. tmux Ctrl+B nefunguje

  2. Vazby kláves Tmux nefungují

  3. Internet nefunguje v Anboxu na Ubuntu 18.04

  1. Jak přimět Vim, aby správně spolupracoval s Tmux?

  2. Získání 256 barev pro práci v Tmux?

  3. GNU displej + od putty