Klawisz ESC powoduje niewielkie opóźnienie w terminalu z powodu jego działania Alt +


67

Moje ustawienia terminala to gnome-terminal + tmux + zsh z powiązaniami vi.

W aplikacjach takich jak vim, a nawet w trybie edycji vi wiersza poleceń zsh, muszę często naciskać ESCklawisz, ale zanim wystąpią efekty tego klawisza, występuje niewielkie opóźnienie. Zobacz ekran GNU spowalnia klawisz Vim ESC

Po kilku eksperymentach odkryłem, że naciśnięcie ESCklawisza i natychmiast inny klawisz (powiedzmy b) ma taki sam efekt jak uderzenie Alt+b. Nie wiem, dlaczego tak jest (prawdopodobnie z wcześniejszych powodów, kiedy nie było Alt? Nie wiem). Tak czy inaczej, mam dwa Altklucze i nie chcę tego zachowania z moim ESCkluczem. Próbowałem z C+[tym samym problemem.

Nie jestem pewien, kto jest za to odpowiedzialny, terminal gnome, tmux lub sam system operacyjny (Ubuntu Natty). Wszelkie pomysły, jak rozwiązać ten problem, byłyby świetne.

Aktualizacja : Sprawdziłem bez tmux na innym terminalu (LXTerminal) i tam też jest opóźnienie.


1
Nie mogłem zrozumieć, dlaczego mój vim zachowuje się dziwnie. To pytanie przypomniało mi, że właśnie zacząłem używać go na ekranie. Uratowałeś moje zdrowie psychiczne.
pabo

Odpowiedzi:


111

Oto faktyczna poprawka. Dodaj następujące elementy do .tmux.conf:

set -s escape-time 0

4
Świetnie, dziękuję! Miałem opóźnienie opuszczenia trybu wstawiania w vimie i tak naprawdę nie myślałem, że może to zakłócać tmux. To
załatwiło sprawę

7
Jak wspomniano w superuser.com/questions/252214/ ... Musiałem zrobić, tmux kill-serveraby to zadziałało.
Phil

Dla każdego, kto przybył na tę stronę, próbując zrozumieć, dlaczego występuje opóźnienie przy przełączaniu z trybu wstawiania do trybu poleceń podczas używania trybu vi w bash, zobacz superuser.com/a/1161871/236677
Kvass

3
Możesz ponownie załadować plik konfiguracyjny, otwierając wiersz komend w tmux za pomocą tmux-prefix(domyślnie Ctrl+b), a następnie :wpisując source-file $HOME/.tmux.conf.
Folfy

7

Opóźnienie jest spowodowane przez procedury wprowadzania, które mogą wymagać zdecydowania, czy klawisz funkcyjny został naciśnięty, czy nie. W tym celu procedura wejściowa uruchamia licznik za każdym razem, gdy odczytuje znak ESC. Znaki odczytywane z wejścia zanim skończy się czas (powiedzmy, dziesiąta część sekundy) są następnie interpretowane jako sekwencja ESC klawisza funkcyjnego i ta sekwencja ESC zostanie porównana ze znanymi ciągami sekwencji ESC z terminfo lub baza danych termcap (zależy od używanych procedur niskiego poziomu).

Oczywiście jest to denerwujące w przypadku aplikacji, w których ESC jest używany samodzielnie, ale nie znam żadnego obejścia tego problemu.

Jeśli chodzi o twoje pytanie z zachowaniem ESC a= Meta a:

Meta-klucze nie były dostępne we wszystkich klawiaturach. Aby obejść ten problem, często można było używać klawisza ESC do naciśnięcia przed drugim klawiszem.


Dziękuję za wyjaśnienie ktf. Opóźnienie nie jest obecne w gvim, tylko w terminalu (sprawdziłem bez tmux i opóźnienie nadal istnieje).
Shrikant Sharat

gvim nie cierpi z powodu tego problemu, ponieważ otrzymuje informację, który klawisz został naciśnięty z serwera X11 (więc nie musi analizować sekwencji ESC).
ktf 24.10.11

Ok, więc muszę sprawić, by mój terminal gnomów zachowywał się w ten sam sposób.
Shrikant Sharat

terminal gnome nie jest problemem - opisany problem dotyczy tylko programów działających na terminalu (lub w emulacji terminala) i musi analizować klawisze funkcyjne. Takie samo zachowanie wystąpi, jeśli na przykład spróbujesz xterm lub KDE-Terminal.
ktf 24.10.11

2
„Meta-klawisze nie były dostępne we wszystkich klawiaturach. Jako obejście często można było używać klawisza ESC do naciskania przed drugim klawiszem.” Być może nawet wcześniej, ttys często miały tylko siedmiobitowe interfejsy danych; nie było ósmego „bitu”, więc trzeba było wysłać ESC dla Meta. A obecnie UTF-8 jest szeroko rozpowszechniony, więc nawet przy ośmiobitowych połączeniach nie można użyć wysokiego bitu dla Meta.
Chris Page

3

Chociaż może to nie rozwiązać bezpośrednio problemu, okazało się, że mogę <Ctrl> cwyjść z trybu wstawiania. Można to również wykorzystać do opuszczenia przewijania ekranu tmux (które można wywołać za pomocą <leader> PgUP)


3
Nie polecałbym używania <C-c>wyjścia z trybu wstawiania podczas regularnego używania, ponieważ nie uruchamia on polecenia InsertLeaveautomatycznego, którego mogą szukać niektóre wtyczki. Zobaczyć :h i_CTRL-C.
Shrikant Sharat
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.