2013-09-03 2 views
33

Attualmente sto usando tmux con variabile $ TERM xterm-256color. Quando in bash sotto tmux, premendo home/end si inseriscono i caratteri tilde (~). Al di fuori di tmux le chiavi home/end funzionano bene.Home/Fine tasti non funzionano in tmux

Utilizzando gatto e tput, ho potuto vedere che c'era una mancata corrispondenza tra le sequenze generate e attese:

$ cat -v # pressing home, then end 
^[[1~^[[4~ 
$ tput khome | cat -v; echo 
^[OH 
$ tput kend | cat -v; echo 
^[OF 

Per risolvere questo problema, ho deciso di aggiungere il seguente al mio .bashrc:

if [[ -n "$TMUX" ]]; then 
    bind '"\e[1~":"\eOH"' 
    bind '"\e[4~":"\eOF"' 
fi 

Questo ha risolto il problema per bash, tuttavia in altri programmi readline, ad esempio all'interno di un REPL come ipython, inserisce ancora una tilde per home/end.

Perché esattamente questo è un problema in primo luogo? Perché la sequenza generata è diversa quando sono all'interno di tmux o al di fuori di esso? Come può risolvere questo in modo che non sia un problema in nessun programma?

+0

questa è una buona domanda per tmux config, però vorrei suggerire cercando di abituarsi a 'Ctrl-A/E/F/B/'' alt-B/F ... '(emacs bind) per spostare il cursore – Kent

+0

btw, se questo ti aiuta? http://stackoverflow.com/questions/8604150/with-term-screen-256color-under-tmux-home-and-end-keys-dont-work-why – Kent

+0

Attualmente utilizzo ctrl-a per il prefisso della chiave di comando in tmux (simile allo schermo). Ho guardato quel post prima, ma sembra riguardare solo Vim, e non è un problema per me in Vim. –

risposta

26

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

+0

Il mio problema simile è stato risolto impostando le combinazioni di tasti usando '.inputrc' (vedi' info readline') o per zsh in '.zshrc' come in' http: // zshwiki.org/home/zle/bindkeys' – here

+3

Modifica ' ~/.tmux.conf' e aggiungi una riga 'set -g default-terminal" screen-256color "' – Wernight

+1

Questa risposta, funziona anche per lo stesso problema con GNU Screen. Ho appena aggiunto 'term" screen-256color "' al mio ~/.screenrc –

4

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

+0

Ero sopraffatto da TERM che era la causa di tutti i miei problemi grazie per il collegamento –

+0

Modifica del file ~/.inputrc ha funzionato per me. – mike

17

In tmux 2.0, si può semplicemente aggiungere queste 2 righe nel .tmux.conf:

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

Questo funzionerà solo per readline (ed Emacs) e avrà conseguenze non intenzionali altrove. –