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
.