2013-09-03 8 views
33

Aktualnie używam tmux ze zmienną xterm-256color $ TERM. Kiedy w bash pod tmux, naciśnięcie home/end wstawi znaki tyldy (~). Poza tmux klawisze home/end działają dobrze.Strona główna/Klawisze końcowe nie działają w tmux

Korzystanie kota i tput, mogłem zobaczyć, że istnieje rozbieżność między oczekiwanymi i generowanych sekwencji:

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

Aby rozwiązać ten problem, postanowiłem dodać następujące do mojego .bashrc:

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

Naprawiono problem z bash, jednak w innych programach readline, takich jak REPL, takich jak ipython, nadal wstawia tyldę dla domu/końca.

Dlaczego to jest problem? Dlaczego wygenerowana sekwencja jest inna, gdy jestem wewnątrz tmux, a poza nim? Jak to naprawić, aby nie było problemu w żadnym programie?

+0

to jest dobre pytanie dla tmux config, jednak chciałbym zaproponować Ci starają się przyzwyczaić do 'Ctrl-A/E/F/B/'' alt-B/F ... '(bind emacs), aby przesunąć kursor – Kent

+0

btw, jeśli to pomaga? http://stackoverflow.com/questions/8604150/with-term-screen-256color-under-tmux-home-and-end-keys-dont-work-why – Kent

+0

Aktualnie używam ctrl-a dla prefiksu klucza polecenia w tmux (podobny do ekranu). Spojrzałem na ten post wcześniej, ale wydaje się, że dotyczy to tylko Vima i nie stanowi to dla mnie problemu w Vimie. –

Odpowiedz

26

Wygląda na to, że głównym problemem jest używanie xterm-256color dla $ TERM. Zmieniłem $ TERM na screen-256color i problem zniknął.

+0

Mój podobny problem został rozwiązany przez ustawienie skrótów klawiszowych za pomocą '.inputrc' (patrz' info readline') lub dla zsh w '.zshrc' jak w' http: // zshwiki.org/home/zle/bindkeys' – here

+3

Edytuj ' ~/.tmux.conf' i dodaj wiersz 'set -g default-terminal" screen-256color "' – Wernight

+1

Ta odpowiedź działa również dla tego samego problemu z GNU Screen. Właśnie dodałem "termin" screen-256color "' do mojego ~/.screenrc –

4

Jeśli chcesz pozostać z xterm-256color w tmux z jakiegoś powodu - użyj arch solution z inputrc. Testowałem to w tmux z rxvt, ruby ​​irb, python, lua i klawisze home/end są w porządku. Prawdopodobnie każda aplikacja readline będzie w porządku.

+0

Nadpisałem TERM, który był przyczyną wszystkich moich problemów, dzięki linkowi –

+0

Edytowanie pliku ~/.inputrc działało dla mnie. – mike

17

W tmux 2,0, można po prostu dodać te 2 linie w .tmux.conf:

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

To będzie działać tylko dla readline (i Emacs) i będzie miało niezamierzone konsekwencje w innych miejscach. –