Jak sprawić, by vim działał poprawnie z tmux?

19

Próbuję dowiedzieć się, jak dostać się vimi tmuxgrać razem.

Mój problem brzmi: kiedy używam, xterm-256colormogę vimładnie pracować, ale tło nie renderuje się poprawnie.

Naprawiłem to za pomocą screen-256color. Wygląda to ładnie, ale psuje Ctrl + arrow keys(przechodzą w tryb wstawiania i usuwają 4 linie). Chcę użyć tych mapowań zamiast do przełączania kart vim.

Jak mogę to uruchomić?

przechytrzyć
źródło

Odpowiedzi:

8

Prowadzony catwewnątrz tmuxi naciśnij klawisze pytanie, aby dowiedzieć się kody ucieczki one generują. Dla mnie to daje ^[[Di ^[[C. Następnie wystarczy zmapować kody ucieczki bezpośrednio.

nnoremap ^[[D gT
nnoremap ^[[C gt

gdzie ^[jest znakiem ucieczki, który możesz wstawić naciskając <CTRL-v><ESC>vim.

Mika Fischer
źródło
To nie zmieniło zachowania mojego vima.
przechytrzyć
Co jest drukowane, gdy uruchamiasz kota w tmux i naciskasz klawisze?
Mika Fischer,
^ [[1; 5C i ^ [[1; 5D. Dobry pomysł, nie wiedziałem, jak je zdobyć. Właśnie tego spróbowałem. To działa! Dziękuję Ci.
przechytrzyć
Świetny. Zredagowałem moją odpowiedź, aby uwzględnić metodę uzyskania odpowiednich kodów ucieczki.
Mika Fischer
22

Istnieje kilka poziomów konfiguracji, które należy poprawnie skonfigurować, aby uzyskać najlepszą funkcjonalność.

  1. Skonfiguruj tmux, aby rozpoznawał sekwencje. Przed uruchomieniem tmux ustaw wartość TERM odpowiednią dla emulatora terminala (np xterm-256color.). Wpis w bazie terminfo zidentyfikowane przez zmienną środowiskową TERM mówi tmux jak rozpoznawać sekwencje zmodyfikowany klawiszy strzałek (funkcje zdefiniowane przez użytkownika { kUP, kDN, kRIT, kLFT} {, 3.. 7}).
  2. Skonfiguruj tmux, aby wygenerował sekwencje. Ustaw xterm-keysopcję sesji ontak, aby tmux wygenerował własną sekwencję w stylu xterm, gdy otrzyma sekwencję, którą identyfikuje jej TERM. W twoim ~/.tmux.conf:

    set-option -g xterm-keys on
    
  3. Skonfiguruj programy działające w tmuxie, aby używały / oczekiwały większości swoich sekwencji. Upewnij się, że używasz screenopartego na TERM wewnątrz Tmuxa (np screen-256color.). To mówi programom działającym w tmuxie, jak kontrolować terminalną (re) emulację terminala tmux i jakie odpowiedzi powinny oczekiwać od tmux .
  4. Niestety, screenoparte na bazach danych wpisy terminfo często nie definiują żadnych sekwencji dla zmodyfikowanych klawiszy strzałek (tzn. Mogą ich nie mieć kUPitd.), Więc programy działające w tmux mogą nie wiedzieć, że mogą oczekiwać takich sekwencji. Konieczne będzie ręczne skonfigurowanie programów, które mają rozpoznać te klucze. W Vimie możesz umieścić to w ~/.vimrc:

    if &term =~ '^screen'
        " 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"
    endif
    

    Możesz użyć wariantów bez x(tj. <Up>Zamiast <xUp>, itd.), Jeśli okaże się, że użycie opcji x-variant powoduje, że normalne klawisze strzałek przestają działać.

    Zaletą takiego zdefiniowania klawiszy jest to, że nie trzeba mapować każdej kombinacji modyfikatora osobno (Shift, Control, Contol + Shift, Meta, Meta + Shift, Meta + Control, Meta + Control + Shift); *dostaje szczególną interpretację do obsługi wszystkich powiązanych sekwencji (patrz :help xterm-modifier-keys).

  5. Następnie możesz zmapować klucze zamiast ich zakodowanych sekwencji:

    nnoremap <C-Right> gt
    nnoremap <C-Left> gT
    
Chris Johnsen
źródło
1
Hej, to działało idealnie!
Pablo Olmos de Aguilera C.
2

Jak wyjaśniono tutaj , wyłącz wymazywanie koloru tła (BCE), usuwając t_utopcję terminala (uruchom :set t_ut=w Vimie, a następnie naciśnij Control+, Laby odświeżyć wyświetlacz terminala), aby schematy kolorów działały poprawnie, gdy Vim jest używany na ekranie tmux i GNU.

W ten sposób możesz zachować swoją TERMwartość jak w xterm-256colorprzypadku prawidłowego wykrywania klucza, a także uzyskać prawidłowe renderowanie schematu kolorów Vima! :-)

sunaku
źródło
1

Czy ustawienie set t_Co=256w ~ / .vimrc w ogóle pomaga? Jest to tylko ustawienie kolorów, ale może pomóc rozwiązać niektóre problemy.

Możesz również ponownie mapować ctrl+Arrowklucze w ~ / .vimrc ...

Edycja: czy próbowałeś ctrl+Arrowpodczas sesji ekranowej GNU? Myślę, że to może być twój problem.

Sardathrion - Przywróć Monikę
źródło
wygląda i działa dobrze na ekranie z xterm-256color
przechytrzyć
zestaw t_Co = 256 jest również zrobiony
przechytrzyć
Czy coś z tego pomogło?
Sardathrion
Niestety nie. Co dokładnie rozumiesz przez remapign ctrl + strzałka? Używam ich już zamapowanych do zmiany kart w vimie.
przechytrzyć
jest mapowany w następujący sposób: map <C-Right> gt
przechytrzyć