Die ESC-Taste verursacht aufgrund des Alt + -Verhaltens eine kleine Verzögerung im Terminal

67

Mein Terminal-Setup ist gnome-terminal + tmux + zsh mit vi-Bindungen.

In Anwendungen wie vim oder sogar im Bearbeitungsmodus vi der Befehlszeile von zsh muss ich häufig die ESCTaste drücken, aber es gibt eine kleine Verzögerung, bevor die Auswirkungen dieser Taste auftreten. Siehe GNU-Bildschirm macht Vim ESC-Taste langsam

Nach einigem Experimentieren stellte ich fest, dass das Schlagen einer ESCTaste und sofort einer anderen Taste (etwa b) den gleichen Effekt wie das Schlagen hat Alt+b. Ich weiß nicht, warum dies der Fall ist (wahrscheinlich aus alten Gründen, als es keine gab Alt? Ich weiß es nicht). In beiden AltFällen habe ich zwei Schlüssel und möchte dieses Verhalten mit meinem ESCSchlüssel nicht. Ich habe es versucht C+[und es ist das gleiche Problem damit auch.

Ich bin nicht sicher, wer dafür verantwortlich ist, Gnome-Terminal oder TMUX oder mein Betriebssystem selbst (Ubuntu Natty). Irgendwelche Ideen, wie man das angehen könnte, wären großartig.

Update : Ich habe ohne tmux auf einem anderen Terminal (LXTerminal) nachgesehen und die Verzögerung ist auch dort vorhanden.

Shrikant Sharat
quelle
1
Ich konnte nicht herausfinden, warum sich mein Vim seltsam verhielt. Diese Frage erinnerte mich daran, dass ich gerade damit begonnen hatte, sie auf dem Bildschirm zu verwenden. Du hast meinen Verstand gerettet.
Pabo

Antworten:

111

Hier ist eine aktuelle Lösung. Fügen Sie Folgendes hinzu zu .tmux.conf:

set -s escape-time 0
Vicent Marti
quelle
4
Genial, danke! Hatte eine Verzögerung beim Verlassen des Einfügemodus in vim und hatte nicht wirklich gedacht, dass es sich um einen störenden TMUX handeln könnte. Dies war der Trick
Actionshrimp
7
Wie in superuser.com/questions/252214/… erwähnt, musste ich dafür sorgen , tmux kill-serverdass dies in Kraft trat.
PhilT
Für alle , die auf dieser Seite angekommen versuchen zu verstehen , warum eine Verzögerung gibt es , wenn sie von Insert - Modus Umschalten in den Befehlsmodus während vi - Modus in bash finden Sie unter superuser.com/a/1161871/236677
Kwas
3
Sie können die Konfigurationsdatei neu laden, indem Sie die Eingabeaufforderung in tmux mit tmux-prefix(Standard Ctrl+b) gefolgt von :und eingeben source-file $HOME/.tmux.conf.
Folfy
7

Die Verzögerung wird durch die Eingaberoutinen verursacht, die möglicherweise entscheiden müssen, ob eine Funktionstaste gedrückt wurde oder nicht. Dazu startet die Eingaberoutine bei jedem Einlesen eines ESC-Zeichens einen Timer. Zeichen, die von der Eingabe gelesen werden, bevor der Timer abgelaufen ist (sagen wir eine Zehntelsekunde), werden dann als ESC-Sequenz einer Funktionstaste interpretiert und diese ESC-Sequenz wird mit bekannten Zeichenfolgen von ESC-Sequenzen aus dem Terminfo oder dem verglichen termcap-Datenbank (hängt davon ab, welche Routinen auf niedriger Ebene verwendet werden).

Natürlich ist dies für Anwendungen ärgerlich, bei denen ESC alleine verwendet wird, aber ich kenne keine Problemumgehung dafür.

Zu Ihrer Frage mit dem Verhalten von ESC a= Meta a:

Metatasten waren nicht für alle Tastaturen verfügbar. Um dieses Problem zu umgehen, durfte häufig die ESC-Taste vor der anderen Taste gedrückt werden.

ktf
quelle
Danke für die Erklärung ktf. Die Verzögerung ist in gvim nicht vorhanden, nur im Terminal (ich habe ohne tmux geprüft und die Verzögerung ist immer noch da).
Shrikant Sharat
gvim leidet nicht an diesem Problem, da es die Information erhält, welche Taste vom X11-Server gedrückt wurde (so dass ESC-Sequenzen nicht analysiert werden müssen).
ktf
Ok, also muss ich dafür sorgen, dass sich mein Gnome-Terminal genauso verhält.
Shrikant Sharat
das gnome-terminal ist nicht das problem - das beschriebene problem betrifft nur programme, die auf einem terminal (oder in einer terminal-emulation) laufen und die funktionstasten analysieren müssen. Sie werden dasselbe Verhalten feststellen , wenn Sie beispielsweise xterm oder KDE-Terminal ausprobieren .
ktf
2
"Meta-Tasten waren nicht für alle Tastaturen verfügbar. Als Problemumgehung durfte häufig die ESC-Taste vor der anderen Taste gedrückt werden." Vielleicht sogar vor dieser Zeit hatten sie oft nur sieben-Bit-Datenschnittstellen; Es gab kein achtes "Meta-Bit", daher musste ein ESC für Meta gesendet werden. Und heutzutage ist UTF-8 weit verbreitet, sodass Sie selbst bei Acht-Bit-Verbindungen das hohe Bit nicht für Meta verwenden können.
Chris Seite
3

Obwohl dies Ihr Problem möglicherweise nicht direkt behebt, habe ich festgestellt, dass ich den <Ctrl> cEinfügemodus mit beenden kann. Dies kann auch verwendet werden, um das Scrollen auf dem Bildschirm von tmux zu beenden (das mit aufgerufen werden kann <leader> PgUP).

dtyler
quelle
3
Ich würde nicht empfehlen, <C-c>den Einfügemodus bei normaler Verwendung zu InsertLeavebeenden, da der automatische Befehl, auf den einige Plugins achten, nicht ausgeführt wird . Sehen :h i_CTRL-C.
Shrikant Sharat