GNU/Linux >> Linux Esercitazione >  >> Linux

I tasti Home/Fine non funzionano in tmux

In tmux 2.0, puoi semplicemente aggiungere queste 2 righe nel tuo .tmux.conf :

bind -n End send-key C-e
bind -n Home send-key C-a

Sembra che il problema principale sia con l'utilizzo di xterm-256color per $TERM. Ho cambiato $TERM in screen-256color e il problema è scomparso.


Se vuoi rimanere con xterm-256color in tmux per qualche motivo, usa la soluzione arch con inputrc. L'ho provato in tmux con rxvt, ruby ​​irb, python, lua e le chiavi home/end sono ok. Probabilmente ogni app readline andrà bene.

Dal wiki di arch:

Per prima cosa:

non impostare $TERM manualmente:lascia che lo faccia il terminale.

Molte applicazioni a riga di comando utilizzano la libreria Readline per leggere l'input. Quindi la corretta configurazione di Readline può correggere Home e End in molti casi.

il file predefinito /etc/inputrc non include una mappatura per le chiavi home/end.

Per verificare qual è la sequenza di escape emessa per queste chiavi:

1. Ctrl + V
2. Home
3. Spacebar
4. Ctrl + V
5. End

questo probabilmente stamperà:$ ^[[1~ ^[[4~ . Quindi devi aggiungere una mappatura per queste sequenze al tuo inputrc (/etc/inputrc deve essere globale o solo per il tuo utente ~/.inputrc):

"\e[1~": beginning-of-line
"\e[4~": end-of-line

Aggiungi quanto segue al tuo .tmux.conf :

bind-key -n Home send Escape "OH"
bind-key -n End send Escape "OF"

E il gioco è fatto!

Spiegazione

Dopo aver provato ognuno di questi e molti altri che ho visto mentre esaminavo altre risposte e documentazione, questo alla fine ha funzionato per me in ogni scenario che ho lanciato. Non posso promettere lo stesso per te, perché gli scenari di ognuno sono diversi, ma questo è quello che ho ottenuto.

Questo è stato scoperto dopo aver introdotto la stessa prova/errore e la stessa logica da un articolo piuttosto rilevante che non è più disponibile. La chiave è dove avviene la traduzione; nel mio caso, questo accade all'interno del mio .tmux.conf , anziché .bashrc o .zshrc (principalmente perché la mia home/end funzionava bene al di fuori di tmux )

Debug

Puoi eseguire il debug di questo problema utilizzando cat -v .

Esegui cat -v , quindi premi Home e Fine chiavi. Esci usando Ctrl +C .

$ cat -v

Ecco come appariva il mio output all'interno di tmux using zsh , zsh e bash :

tmux

➜  ~ cat -v
^[[1~^[[4~^C

zsh

➜  ~ cat -v
^[[H^[[F

bash

bash-3.2$ cat -v
^[[H^[[F

Soluzione

Confronta gli esempi precedenti con ciò che ci aspettiamo di vedere, accoppiando tput con cat -v :

$ tput khome | cat -v; echo
^[OH
$ tput kend | cat -v; echo
^[OF

Conclusione

Perché questo problema esiste solo all'interno di tmux , e non all'interno delle shell stesse, ho optato invece per apportare le modifiche al bind all'interno della configurazione di tmux. Usando bind-key abbinato a send , possiamo usare Escape parola chiave abbinata alla sequenza che vogliamo ottenere la nostra traduzione. Così:

bind-key -n NAME_OF_KEY send Escape SEQUENCE_GOES_HERE

Questo processo di debug e soluzione può essere applicato a qualsiasi altro problema di traduzione chiave. Ma non impazzire troppo. Alcune chiavi sono associate a determinate sequenze di escape per un motivo. Nota come bash e zsh ricevuto il ^[[H sequenza per Casa invece di ^[OH; probabilmente non è consigliabile sovrascriverlo nel nostro .zshrc a meno che non ci siano grossi problemi con questo in zsh .


Linux
  1. Tmux non sta cercando .tmux.conf?

  2. Linux – Perché Setuid non funziona??

  3. Vim non funziona all'interno di Tmux?

  4. gpg:comando non trovato

  5. tmux Ctrl+B non funziona

Perché `esce &` non funziona?

Come funziona cat << EOF in bash?

errore libevent non trovato in tmux

ssh-copy-id non funziona

Le associazioni dei tasti Tmux non funzionano

Visualizzazione dello schermo GNU + da stucco