Ich möchte ein Makro in einem Makro wie folgt aufzeichnen:
qa
[ first macro ... ]
qb
[ second macro ... ]
q
[ some more stuff, involving @b ... ]
q
Das zweite q
wird jedoch als Aufforderung zum Stoppen des ersten Makros interpretiert, und der Rest wird als Befehl interpretiert.
Gibt es eine Möglichkeit, ein zweites Makro innerhalb eines Makros aufzuzeichnen?
Wenn nicht, gibt es eine andere Möglichkeit, den gewünschten Effekt zu erzielen, wenn Sie eine bestimmte Folge von Tastenanschlägen wiederholen, während Sie sich bereits in einem Makro befinden?
b
und dann die Makro aufzeichnena
calling@b
?b
es destruktive Auswirkungen hat, sodass ich es nicht zuerst aufnehmen kann (es sei denn, ich möchte es aufnehmen, drückeu
einige Male und beginne dann mit der Aufnahmea
).enew
aufzeichnen ( , aufzeichnenbd
) oder dasb
Register direkt bearbeiten können , indem Sie den Inhalt Ihres Makros in Ihre Datei schreiben und ihn dann "aufzeichnen", indem Sie die Zeichen in das Register mit einfügen"by
.Antworten:
AFAIK, Sie können nicht zwei Makros
qx...q
auf einmal aufnehmen. Für Ihre Anforderung, müssen Sie Makro erstellenb
durchqb....q
, dannqa...@bq
.Wenn Sie auf „Record“ nicht möchten ,
b
können Sie tun ,let @b='whatever'
dann@b
das Makro wiedergeben wird. Zum Beispiellet @b='ggdG'
definieren ein Makrob
ohne „Aufnahme“ den gesamten Inhalt Ihres aktuellen Puffer zu entfernen.Es gibt einen Makrodefinitionstrick, der für Ihre Frage möglicherweise nicht relevant ist. Es ist ein rekursives Makro, kein verschachteltes Makro. Das heißt, Sie können Folgendes tun:
qa..whatever..@aq
Dadurch wird das Makro rekursiv wiedergegeben
a
. Es ist manchmal nützlich, wenn wir nicht wissen, wie oft wir das Makro abspielen möchten. Denn wenn ein Fehler auftritt, stoppt die Makro-Wiedergabe automatisch. Es spart999@a
zum Beispiel.quelle
Das Aufnehmen von Tastenanschlägen in das Makro @a ist dasselbe wie das Ziehen des Textes, der diesen Tastenanschlägen entspricht, um a zu registrieren. Sobald etwas in einem Register gespeichert ist, können Sie es entweder ablegen oder als Makro / Tastenanschlag abspielen. Sie können also ein Makro in @a über
qa
aufzeichnen. Ziehen Sie dann während der Aufzeichnung des Makros Text in das Register b, und verwenden Sie möglicherweise etwas wie"bye
. Das Einzige, was Sie tun müssen, ist, Text in ein anderes Register zu ziehen, als wenn Sie das Register b nicht angegeben hätten. Nachdem sich in Register b Text befindet, können Sie diesen Text durch Drücken von als Tastendruck wiedergeben@b
. Sie können dies sogar tun, während das Makro @a noch aufgezeichnet wird. Es ist metamacrolicious!Der Hauptnachteil dabei ist, dass es wahrscheinlich einfacher ist, eine Vimscript-Funktion zu schreiben, die das tut, was Sie wollen, und sie dann möglicherweise während einer Makroaufnahme aufzurufen. Das Schöne an Makros ist, dass Sie den Effekt der Aufnahme sehen können, während Sie sie aufnehmen. Diese Meta-Makro-Aufnahmetechnik nimmt Ihnen dies jedoch etwas ab.
quelle