Nieznaczne opóźnienie przy przełączaniu trybów w vimie za pomocą tmux lub screena

68

Przełączanie do i z trybu wstawiania w Vimie nie jest już natychmiastowe, ponieważ używam tmux. Po naciśnięciu Escw trybie wstawiania wyjście z trybu wstawiania zajmuje zauważalnie dużo czasu. Po naciśnięciu Esci po naciśnięciu dowolnego innego klawisza następuje natychmiastowe przełączenie, a polecenie klawisza naciśniętego po nim Escjest wykonywane. Masz pojęcie, co może to spowodować?

Konfiguracja Vima nie stanowi problemu, ponieważ opóźnienie nie występuje, gdy uruchamiam Vima poza tmux, więc prawdopodobnie jest to w jakiś sposób związane z tmux. Używam gnome-terminal btw.

Warto również zauważyć, że wydaje się, że nie mogę zdefiniować kluczowych powiązań w tmux, ponieważ Escmój plan polegał Escna:

bind Escape send-keys ^[

Niestety, wydaje się, że wiązanie czegokolwiek, Escponieważ tmux nie działa. Ten sam problem występuje również na ekranie.

Ton van den Heuvel
źródło

Odpowiedzi:

122

Po przeszukaniu stron podręcznika okazuje się, że tmux ma na to opcję. Poniższe w ~/.tmux.confrozwiązuje problem opóźnienia:

 set -sg escape-time 0

Musisz ponownie uruchomić serwer tmux lub ponownie załadować konfigurację, aby to zadziałało. Aby to zrobić, source-file ~/.tmux.confwydaj polecenie z tmux.

Ton van den Heuvel
źródło
2
Gdzie to znalazłeś? Nigdzie nie mogę znaleźć czasu na ucieczkę man tmux, a polecenie nie działa dla mnie.
djeikyb
Podejrzewam, że jest dostępny tylko w wersji rozwojowej. Możesz go pobrać tutaj: github.com/ThomasAdam/tmux
Ton van den Heuvel
Uwielbiam wszystko w tobie za tę odpowiedź. To właśnie rozwiązało dla mnie niejasny problem z emacsem i teraz mogę wreszcie iść spać!
Bo Jeanes,
4
Musiałem użyć serwera zabijania Tmux, zanim to ustawienie zadziałało. Dzięki!
Sam
1
To sprawia, że ​​żałuję, że nie mogę dać wam 10 głosów pozytywnych. Znalazłem to po godzinie walki o przekroczenie limitu czasu w vimie. Dziękuję Ci!
malvim
4

Miałem inny, ale podobny problem, który próbowałem rozwiązać, gdy znalazłem tę stronę, więc opublikuję ją tutaj, na wypadek, gdyby była pomocna dla każdego, kto szuka tej odpowiedzi i znajdzie tę stronę w ten sam sposób.

Problem: tryb vi w bash ma opóźnienie przy przełączaniu z trybu wstawiania do trybu poleceń

Rozwiązanie: W swoim ~/.inputrcpliku dodaj set keyseq-timeout ngdzie njest jakaś niska wartość większą niż 0. ndomyślnie 500 ms, co jest, co powoduje opóźnienia. Zobacz dokumentację tutaj .

Ponadto, jeśli chcesz być w stanie określić, w jakim trybie jesteś, sprawdź rozwidlenie bata Dylana Cali .

Kwas
źródło
to jest bardzo pomocne, ustawiłem to 0.01i teraz jest przyjemnie znacznie szybsze. dzięki!
Można go również dołączyć, /etc/inputrcaby był dostępny dla wszystkich użytkowników.
1

Wygląda na to, że używasz mapowania, które zaczyna się od ESC. Kiedy naciśniesz ESC, vim musi poczekać, aby sprawdzić, czy następny klawisz jest tym w mapowaniu. Jeśli tak nie jest, można natychmiast kontynuować.

Konfiguracja vima może być zależna od terminala, więc fakt, że nie dzieje się poza Tmuxem, nie znaczy wiele. Vim może zapytać o $TERMzmienną środowiskową i wybrać inną konfigurację w zależności od jej wartości.

Ponieważ używa gnome-terminal, AFAIK, xtermjako wartość $TERMzmiennej, i używa tmux screen, przejrzałbym wszystkie twoje pliki konfiguracyjne vima w poszukiwaniu ustawień, które są używane tylko wtedy, gdy $TERMzmienna jest równa screen. Domyślam się, że jakiś plik konfiguracyjny vima w twoim systemie ustawia mapowania do obsługi klawiszy strzałek (te zaczynają się od ESCznaku), gdy terminal jest screen.

Możesz to przetestować, tymczasowo zmieniając $TERMzmienną w tmux przed uruchomieniem vima. Jeśli twoja powłoka to bash, wywołaj vim jako

TERM=xterm vim

w tmux i sprawdź, czy problem nadal występuje. Nie należy tego jednak traktować jako poprawki, ponieważ mogą występować różnice między terminalowymi możliwościami tmux i xterm i mogą wystąpić pewne problemy.

Jan Hlavacek
źródło
Kilka dobrych wskazówek tutaj. Używam bash, ale niestety TERM=xterm vimnie rozwiązałem problemu. Będę musiał kopać trochę głębiej.
Ton van den Heuvel
1

Jak wspomniano w tytule Screen, tutaj jest rozwiązanie, aby naprawić zachowanie klawisza Escape w ekranie GNU. (Zabrano stąd .)

Dodaj

maptimeout 5

do .screenrcpliku konfiguracyjnego.

Twonky
źródło