Wiederholen Sie den letzten Befehl im Normalmodus, einschließlich der Bewegungen, in Vim

Wiederholen Sie den letzten Befehl im Normalmodus, einschließlich der Bewegungen, in Vim

In Vim .kann ich mit den letzten Befehl im Normalmodus wiederholen. Beispiel:

dd.

löscht eine Zeile zweimal.
Aber wenn ich tippe

5j.

der Cursor bewegt sich nicht 10 Zeilen nach unten. Wie wiederhole ich den letzten Befehl im Normalmodus, insbesondere eine Bewegung?

Antwort1

Dies ist sogar in Vanilla Vim machbar, die Anwendbarkeit hängt jedoch von Ihrem Anwendungsfall ab, d. h. davon, wie oft Sie es wiederholen müssen, da für die Wiederholbarkeit ein paar zusätzliche Tastenanschläge erforderlich sind.


Option 1: Machen Sie daraus eine Befehlsmodusoperation

Am Beispiel einer Bewegung um fünf Zeilen nach unten können Sie Folgendes tun:

  1. Enter :norm 5j, es bewegt den Cursor 5 Zeilen nach unten
  2. mit @:die Bewegung wiederholen

:normsteht für normal, jede folgende Zeichenfolge wird als Ihre Tastenanschläge im Normalmodus betrachtet


Option 2: Makro verwenden

  1. qa(Makro im Register speichern a, Sie können Ihr eigenes Register auswählen, wie qb, qc)
  2. 5j
  3. q(Makroaufzeichnung beenden)
  4. @aum Ihren aufgezeichneten Vorgang zu wiederholen (ersetzen Sie ihn adurch den von Ihnen gewählten Registernamen, z. B. @b, @c)

Das Einrichten eines Makros erfordert mehr geistige Kraft, ist jedoch in dem Sinne wiederholbarer, dass Sie mehrere Vorgänge in unterschiedlichen Registern speichern können, ohne dass diese durch die letzten Vorgänge überschrieben werden.

Antwort2

vimtut dies leider nicht. Das Beste, was Sie tun können, ist, dierepmo.vimPlugin, das Bewegungsbefehle wiederholt, für die eine Zählung vorliegt.

Antwort3

Änderungen können mit wiederholt werden .. Bewegungen können mit dem Befehl wiederholt werden ;. Dieser Befehl scheint neu zu sein und macht etwas Ähnliches wie das in anderen Antworten erwähnte repmo.vim-Skript.

Um beispielsweise zum vorletzten zu gelangen c, drücken Sie 2fc. Um den Vorgang zu wiederholen, geben Sie einfach ein ;.

Antwort4

Sie können die Zeilen auswählen, die Sie ändern möchten, und den letzten normalen Punktbefehl ausführen

v5j .............. visual select next 5 lines
:'<,'>norm! .      normal mode execute over selection last command '.'

verwandte Informationen