Speedbump bei <Esc> O (Insert to Normal, um eine neue Zeile über dem Cursor einzufügen)


16

Wenn ich mich im Einfügemodus befinde, drücke ich häufig Esc, um in den Normalmodus zu wechseln, und drücke dann sofort O, um eine neue Zeile über dem Cursor zu beginnen und dort in den Einfügemodus zu wechseln.

Aber wenn ich das tue, gibt es eine Verzögerung von 1 Sekunde, nachdem ich die Taste gedrückt habe, Obevor eine sichtbare Reaktion erfolgt. Außerdem , wenn ich während dieser 1-Sekunden - Verzögerung , um den neuen Textes der Eingabe beginnen, wenn der neue Text mit jedem einer bestimmten Menge von Zeichen beginnt (zB j, k, m, n, o), habe ich am Ende in der Mitte von einem anderen Betrieb bis ich es nicht täte Ich habe vor, oft ein Durcheinander zu machen, und an diesem Punkt muss ich anhalten und mit Undos und Redos herumfummeln, bis ich einigermaßen sicher bin, dass ich den Schaden rückgängig gemacht habe.

Um diese Unannehmlichkeit zu vermeiden, habe ich mir angewöhnt, nach jedem Tippen eine Sekunde lang zu pausieren O. Aber das verlangsamt mich und hindert mich daran, der Vim-Speed-Dämon zu sein, der ich sonst sein würde.

Wodurch wird das verursacht? Gibt es ein Update oder eine Problemumgehung?

Antworten:


15

Das passiert nur im Terminal, aber nicht in GVIM, oder? Der Grund dafür ist , dass Vim kann nicht zwischen den einzelnen Typen Tasten und einer ANSI Escape - Sequenz mit den gleichen Tasten (dh ausgehend unterscheiden ^[O..., <Esc>gefolgt von Oin Ihrem Fall).

Informationen zu allen zugrunde liegenden Komplexitäten finden Sie unter :help 'timeout'(und den folgenden Optionen). Dort finden Sie auch einen Konfigurationsvorschlag, der das Problem behebt:

:set timeout timeoutlen=1000 ttimeoutlen=100

3
Sie können auch verwenden set noesckeys; Dies hat den Nebeneffekt, dass die Pfeiltasten (und möglicherweise auch einige andere Tasten?) im Einfügemodus deaktiviert werden.
Martin Tournoij

2
@Carpetsmoker In Bezug auf "set noesckeys" ... funktioniert das, aber nur im Einfügemodus. Ich weiß, dass ich gesagt habe, dass ich mich im Einfügemodus befunden habe. Ich mache jedoch auch oft <Esc> O ausgehend vom normalen Modus (hauptsächlich, wenn ich nicht 100% sicher bin, ob ich im Einfüge- oder im normalen Modus beginne), also möchte ich etwas, das auch in diesem Fall funktioniert.
Don Hatch

1
@DonHatch Sie können verwenden :nnoremap ^[O O, wo ^[durch Drücken von eingegeben wird <C-v><Esc>(kann auch als angezeigt werden <1b>).
Martin Tournoij

5

Zur Umgehung des Problems statt ESCO, Verwendung Control+ OO. Das Control+ Oversetzt Sie für einen Befehl in den normalen Modus und kehrt anschließend in den Einfügemodus zurück.


1

Wie wäre es mit:

Control+C O

Es gibt einige Feinheiten bei der Verwendung von Control+, die CSie beachten sollten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.