Je veux enregistrer une macro dans une macro, comme ceci:
qa
[ first macro ... ]
qb
[ second macro ... ]
q
[ some more stuff, involving @b ... ]
q
Cependant, la seconde q
est interprétée comme une requête pour arrêter la première macro et le reste est interprété comme des commandes.
Existe-t-il un moyen de commencer à enregistrer une deuxième macro dans une macro?
Sinon, existe-t-il un autre moyen d'obtenir l'effet souhaité de répéter une certaine séquence de touches, tout en étant déjà dans une macro?
b
, puis enregistrer l'a
appel de macro@b
?b
a des effets destructeurs, donc je ne peux pas l'enregistrer en premier (à moins que je veuille l'enregistrer, appuyer plusieursu
fois, puis commencer l'enregistrementa
).enew
, enregistrement,bd
) ou éditer directement leb
registre en écrivant dans votre fichier le contenu de votre macro puis "l'enregistrer" en plaçant les caractères dans le registre avec"by
.Réponses:
AFAIK, vous ne pouvez pas enregistrer deux macros
qx...q
en une seule fois. Pour votre besoin, vous devez créer une macro d'b
iciqb....q
làqa...@bq
.Si vous ne voulez pas "enregistrer",
b
vous pouvezlet @b='whatever'
alors@b
relire la macro. Par exemple,let @b='ggdG'
définissez une macrob
pour supprimer tout le contenu de votre tampon actuel sans "enregistrer".Il existe une astuce de définition de macro, qui peut ne pas correspondre à votre question. C'est une macro récursive, pas une macro imbriquée. Autrement dit, vous pouvez faire:
qa..whatever..@aq
cela rejouera récursivement la macro
a
. C'est parfois utile, lorsque nous ne savons pas combien de fois nous voulons rejouer la macro. Parce que lorsque l'erreur se produit, la relecture de macro s'arrête automatiquement. Il sauve999@a
par exemple.la source
L'enregistrement de touches sur la macro @a revient à tirer le texte correspondant à ces touches pour enregistrer a. Une fois que quelque chose est stocké dans un registre, vous pouvez le mettre ou le jouer en tant que macro / touches. Vous pouvez donc commencer à enregistrer une macro sur @a via
qa
, puis pendant que la macro enregistre, tirez du texte pour enregistrer b, peut-être en utilisant quelque chose comme"bye
. Tout ce que cela fait, c'est de taper du texte dans un registre différent de ce qu'il serait si vous n'aviez pas spécifié le registre b. Maintenant que le registre b contient du texte, vous pouvez lire ce texte sous forme de frappes en appuyant sur@b
. Vous pouvez même le faire pendant que la macro @a est encore en cours d'enregistrement. C'est métamacrolicieux!Le principal inconvénient de cela est qu'il serait probablement plus facile d'écrire une fonction vimscript qui fait ce que vous voulez, puis de l'appeler pendant un enregistrement de macro. La beauté des macros est que vous pouvez voir l'effet de ce que vous enregistrez pendant que vous l'enregistrez, mais cette technique d'enregistrement de méta macro enlève un peu cela.
la source