it-swarm.com.de

Wie wende ich in Vim ein Makro auf eine Reihe von Zeilen an?

Ich habe eine Datei mit ein paar Zeilen. Ich habe ein Makro aufgezeichnet, das eine Operation in einer einzelnen Zeile ausführt. Ich möchte dieses Makro in allen verbleibenden Zeilen der Datei wiederholen. Gibt es eine schnelle Möglichkeit, dies zu tun?

Ich habe Strg + Q ausprobiert, eine Reihe von Zeilen markiert und @@ gedrückt, aber das schien den Trick nicht zu machen.

201
Jordan Parmer

Verwenden Sie den Befehl normal im Ex-Modus, um das Makro in mehreren/allen Zeilen auszuführen:

Führen Sie das im Register a in den Zeilen 5 bis 10 gespeicherte Makro aus.

:5,10norm! @a

Führen Sie das im Register a gespeicherte Makro in den Zeilen 5 bis zum Ende der Datei aus.

:5,$norm! @a

Führen Sie das im Register a gespeicherte Makro in allen Zeilen aus.

:%norm! @a

Führen Sie den Makrospeicher in Register a in allen Zeilen aus, die mit pattern übereinstimmen.

:g/pattern/norm! @a

Um das Makro in visuell ausgewählten Zeilen auszuführen, drücken Sie [~ # ~] v [~ # ~] und die j oder k bis die gewünschte Region ausgewählt ist. Dann tippe :norm! @a und beachten Sie die folgende Eingabezeile.

:'<,'>norm! @a

Gib : hilf normal in vim ein, um mehr zu lesen.

320
Judge Maygarden

Verwenden Sie global , um das Makro 'a' in allen Zeilen auszuführen, die 'pattern' enthalten.

:g/pattern/normal! @a

Hilfe erhalten Sie unter: :help global.

58
SergioAraujo

Sie können dies auch tun:

Im normalen Modus:

[number of times to apply the macro] @ [register]

Beispielsweise:

[email protected]

Wendet das Makro in Register q auf die nächsten 1000 Zeilen an.

Update: die akzeptierte Antwort ist viel besser

Update: Wie @kevinliu hervorhob, möchten Sie das Makro wahrscheinlich mit einem j beenden, um zur nächsten Zeile zu gelangen.

33
Max Heiber

Es gibt auch ein Plugin namens RangeMacro, das genau das macht, was Sie wollen! Für alle, die den Namen nicht erraten können, was er tut: Er wiederholt ein aufgezeichnetes Makro für jede Zeile in einem bestimmten Bereich, egal ob durch visuelle Auswahl oder durch ein: 40,50 /: +10

Siehe http://www.vim.org/scripts/script.php?script_id=3271

2
phux