2013-03-16 13 views
8

Te mapowania klawiszy przestają działać w tmux. W moim .vimrc mam:Mapowanie klawiszy strzałek podczas uruchamiania tmux

nmap <Space> i 
map <C-Down> <C-w>j 
map <C-Up> <C-w>k 
map <C-Left> <C-w>h 
map <C-Right> <C-w>l 

Kiedy biegnę :map widzę:

<C-Right>  <C-W>l 
    <C-Left>  <C-W>h 
    <C-Up>  <C-W>k 
    <C-Down>  <C-W>j 

Jednak kiedy uderzę kontrolę i klawisz strzałki w tym samym czasie, to zachowuje się tak, jakby kombinacja klawiszy było zestaw.

+2

Możliwe, że twój system operacyjny lub terminal przechwytują te sekwencje klawiszy. Mój Vim wydaje się nie odbierać ich z moją obecną konfiguracją KiTTY/tmux, ale nie zajrzałem do tego zbyt wiele. –

+1

Czy te mapowania działają poza tmux? Jaki jest twój "$ TERM" w tmux? – romainl

+0

Tak, mapowania działają poza tmux. '$ TERM' w tmux jest takie samo jak z' tmux', które jest 'xterm-256color'. –

Odpowiedz

14

vim wie XTerm -jak zaciski (oznaczony za wyrazem wychodząc z xterm lub konkretnej odpowiedzi na sekwencji t_RV, jeśli istnieje) wspiera rozszerzone sekwencje określonych kluczy zmodyfikowane, ale nie bierze za to screen TERMINY (które powinieneś używać pod tmux).

Można jednak powiedzieć Vima o tych sekwencji i umożliwić im jeśli tmux jest obecny, i terminu rozpoczyna się screen (pierwsze linie włączyć (lepszą) obsługuje mysz pod tmux, które polubisz też):

if &term =~ '^screen' && exists('$TMUX') 
    set mouse+=a 
    " tmux knows the extended mouse mode 
    set ttymouse=xterm2 
    " tmux will send xterm-style keys when xterm-keys is on 
    execute "set <xUp>=\e[1;*A" 
    execute "set <xDown>=\e[1;*B" 
    execute "set <xRight>=\e[1;*C" 
    execute "set <xLeft>=\e[1;*D" 
    execute "set <xHome>=\e[1;*H" 
    execute "set <xEnd>=\e[1;*F" 
    execute "set <Insert>=\e[2;*~" 
    execute "set <Delete>=\e[3;*~" 
    execute "set <PageUp>=\e[5;*~" 
    execute "set <PageDown>=\e[6;*~" 
    execute "set <xF1>=\e[1;*P" 
    execute "set <xF2>=\e[1;*Q" 
    execute "set <xF3>=\e[1;*R" 
    execute "set <xF4>=\e[1;*S" 
    execute "set <F5>=\e[15;*~" 
    execute "set <F6>=\e[17;*~" 
    execute "set <F7>=\e[18;*~" 
    execute "set <F8>=\e[19;*~" 
    execute "set <F9>=\e[20;*~" 
    execute "set <F10>=\e[21;*~" 
    execute "set <F11>=\e[23;*~" 
    execute "set <F12>=\e[24;*~" 
endif 

Jak zaznaczono w komentarzu, należy również włączyć opcję okna xterm-keys. Można to zrobić na wszystkich oknach, jak to (w Twojej ~/.tmux.conf):

set-option -gw xterm-keys on 

(Pamiętaj, że zmiany ~/.tmux.conf nie są automatycznie ładowane Aby były skuteczne, trzeba będzie ręcznie uruchomić to polecenie (w tmux. polecenie powłoki lub po znaku zachęty Prefiks :) lub ponownie załaduj plik konfiguracyjny za pomocą (w komendzie powłoki lub po znaku zachęta Prefiks :) lub zrestartuj serwer (zakończ wszystkie sesje i ponownie uruchom tmux)).

Powiązane problemy