Anwendungsfall
Ich bin im normalen Modus. Ich habe nicht explizit darüber nachgedacht, ein Makro aufzuzeichnen, aber ich nehme eine einzelne Befehlsänderung vor. Ich kann diese Aktion jetzt mit Punkt wiederholen.
Mir ist jetzt klar, dass es eine nützliche Aktion ist, sie in einem Makro zu speichern, um sie später zu verwenden, anstatt jedes Mal den gesamten Befehl einzugeben. Ich kann mich entweder mit dot um alle Änderungen kümmern, die diesen Befehl gerade benötigen, oder ich kann mit der Bearbeitung fortfahren und diesen Befehl später verwenden, indem ich ihn in einem Makro speichere.
Letzteres ist das, was ich tun möchte, aber der einfachste Weg, den ich mir vorstellen kann, ist nicht einfach - machen Sie meine Änderung rückgängig, starten Sie die Aufzeichnung eines Makros und geben Sie den Befehl erneut ein, um die erforderliche Änderung vorzunehmen und die Aufzeichnung des Makros zu beenden.
Was ich bisher versucht habe:
Das Aufzeichnen von Punkten in einem Makro funktioniert nicht, da es den Punkt und nicht die Änderung aufzeichnet, die der Punkt ausführt. ( d5w
Nehmen wir zum Beispiel an, der in dot gespeicherte Befehl lautete: Wenn Sie mit der Aufzeichnung eines Makros beginnen und die Aktion über ausführen. Erwarten Sie, dass bei jeder Ausführung des Makros 5 Wörter gelöscht werden. Dies ist beim nächsten Ausführen nicht der Fall Das Makro wird Punkt und nicht der Befehl d5w
. Dies bedeutet, dass, wenn Sie nach dem Aufzeichnen des Makros eine andere Änderung vorgenommen haben - sagen wir, 3 Wörter löschen mit d3w
und es war die letzte Änderung, die Sie durchgeführt haben. Wenn Sie das Makro ausführen, werden 3 gelöscht Wörter und nicht 5, weil es nur läuft .
)
quelle
Antworten:
Vim führt keinen Verlauf Ihrer normalen Modusbefehle. Wenn Sie einen Verlauf Ihres normalen Modus beibehalten möchten, können Sie diesen wie folgt in einer Datei speichern: /vi//a/587/13848
Befehle im normalen Modus sind normalerweise kurz, daher geben die Benutzer sie einfach im normalen Modus ein und versuchen nicht, Makros zu erstellen. Wenn Sie jedoch Makros aus normalen
Ex
Modusbefehlen erstellen möchten, können Sie sie in einen Modusbefehl konvertieren und dann in einem Makro speichern, wie @wmmso hervorhob. Sie können dies mit demnorm
Befehl tun . Wenn Sie also 2 Wörter ab der aktuellen Cursorposition löschen und imEx
Modus einen normalen Modusbefehl verwenden möchten:norm d2w
. (Ref: http://vimdoc.sourceforge.net/htmldoc/various.html#:norm , Normalen Befehl über den Bereich ausführen )Es ist besser, einen
Ex
Modusbefehl zu verwenden, wenn es sich um einen komplizierten Befehl handelt, da Sie den vollständigen Befehl in einen Puffer eingeben, sicherstellen können, dass er tatsächlich korrekt ist, und ihn auch im Befehlszeilenverlauf speichern.Nachdem Sie Ihren normalen Modusbefehl im Ex-Modus haben, können Sie Ihren Befehl auch wie den Verlauf mit durchsuchen
q:
und ihn dann mit in ein Register kopieren"ay$
, während Sie sich in der Zeile befinden, die die Befehlszeile enthält, die Sie in einem Makro speichern möchten. Wenn Sie das Makro dann ausführen möchten, können Sie es mit ausführen@a
quelle
d2w
?Kopieren Sie den Inhalt des Registers ":" (was Sie gerade getan haben) in ein anderes Register, z. B. registrieren Sie a:
Sie können es mit erneut ausführen
quelle
:
den zuletzt ausgeführten Befehl über:command-name-goes-here
anstelle eines normalend2w