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:
- Enter
:norm 5j
, es bewegt den Cursor 5 Zeilen nach unten - mit
@:
die Bewegung wiederholen
:norm
steht für normal, jede folgende Zeichenfolge wird als Ihre Tastenanschläge im Normalmodus betrachtet
Option 2: Makro verwenden
qa
(Makro im Register speicherna
, Sie können Ihr eigenes Register auswählen, wieqb
,qc
)5j
q
(Makroaufzeichnung beenden)@a
um Ihren aufgezeichneten Vorgang zu wiederholen (ersetzen Sie ihna
durch 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
vim
tut 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 '.'