Warum verzögert sich vim für eine Sekunde, wenn ich den Befehl 'O' verwende (eine neue Zeile darüber öffnen und einfügen)?

26

Wenn ich die meisten Befehle verwende, werden sie sofort wirksam. Wenn ich den OBefehl verwende, sehe ich jedoch, dass das "O" das aktuelle Zeichen für ungefähr eine Sekunde ersetzt, dann kehrt das aktuelle Zeichen zurück und eine neue Zeile wird eingefügt und geöffnet.

Ich habe kein solches Problem mit dem oBefehl (öffnen Sie eine neue Zeile unten und fügen Sie ein).

Wenn es einen Unterschied macht, verwende ich vimab bashim Gnome-Terminal auf Ubuntu 10.04.

Matthew
quelle

Antworten:

27

Wenn die zuvor gedrückte Taste ESC war, gibt es Tasten, die mit ESC O beginnende Escape-Sequenzen generieren können. Abhängig vom Cursortastenmodus kann die Aufwärtspfeiltaste beispielsweise die Escape-Sequenz ESC O A generieren.

Wenn eine teilweise Escape-Sequenz angezeigt wird, wartet vim eine kurze Zeit, um festzustellen, ob ein anderes Zeichen empfangen wurde, das mit einer der für Ihren Terminaltyp definierten Escape-Sequenzen übereinstimmt. Wenn nicht, werden die Zeichen als separate Tastenanschläge behandelt. Sie können dies testen, indem Sie ein Großbuchstaben A eingeben, während Sie darauf warten, dass die Leitung geöffnet wird, um festzustellen, ob sie stattdessen als Aufwärtspfeil behandelt wird.

Es gibt einige vim-Einstellungen, mit denen Sie dies steuern können. :set ttimeoutlen=100ändert das Escape-Sequenz-Timeout auf 100 ms. :set noesckeysDeaktiviert die Erkennung von Tasten, die im Einfügemodus eine Escape-Sequenz senden. Im vi-kompatiblen Modus tritt dieses Problem nicht auf, da esckeys in diesem Modus deaktiviert ist - daher vim -u NONEfunktioniert es.

mark4o
quelle
Zur Verdeutlichung: Mein "Experiment" mit der 140-KB-Zeilendatei befand sich im Voll-VIM-Modus mit meiner Standard-Auswahl an Plug-Ins und Dateitypen. Ich kann sehen, wo Sie vielleicht den Schluss gezogen haben, dass ich verwendet habe, -u NONEaber es fehlt uns noch die Bestätigung des OP.
msw
Wow! Das war eine Weile leicht irritierend, aber ich habe nie darüber nachgedacht. macht jetzt Sinn. Esc OA funktioniert in der Tat wie ein Pfeil nach oben.
Vitaly Kushner
2
:set noesckeysWahrscheinlich ist es nicht das, was Sie wollen - stellen Sie es ein und drücken Sie dann die Pfeiltasten im Einfügemodus, auch wenn Sie nicht vorhaben, sie zu verwenden, möchten Sie nicht, dass sie das tun! Auch außerhalb des Einfügemodus beschleunigt noesckeys nichts. ttimeoutlenist definitiv der
richtige