Quiero grabar una macro dentro de una macro, así:
qa
[ first macro ... ]
qb
[ second macro ... ]
q
[ some more stuff, involving @b ... ]
q
Sin embargo, el segundo q
se interpreta como una solicitud para detener la primera macro, y el resto se interpreta como comandos.
¿Hay alguna manera de comenzar a grabar una segunda macro dentro de una macro?
Si no, ¿hay alguna otra forma de lograr el efecto deseado de repetir una determinada secuencia de pulsaciones de teclas, mientras ya está dentro de una macro?
b
y luego grabar la macroa
llamada@b
?b
tiene efectos destructivos, por lo que no puedo grabarlo primero (a menos que quiera grabarlo, presionaru
varias veces y luego comenzar a grabara
).enew
, grabarbd
) o editar directamente elb
registro escribiendo en su archivo el contenido de su macro y luego "grabándolo" colocando los caracteres en el registro con"by
.Respuestas:
AFAIK, no puedes grabar dos macros de
qx...q
una sola vez. Para su requerimiento, debe crear macrob
porqb....q
entoncesqa...@bq
.Si no desea "grabar"
b
, puedelet @b='whatever'
volver@b
a reproducir la macro. Por ejemplo,let @b='ggdG'
defina una macrob
para eliminar todo el contenido de su búfer actual sin "grabar".Hay un truco de definición de macro, que puede no ser relevante para su pregunta. Es macro recursiva, no macro anidada. Es decir, puedes hacer:
qa..whatever..@aq
esto repetirá recursivamente la macro
a
. A veces es útil, cuando no sabemos cuántas veces queremos reproducir la macro. Porque cuando ocurre un error, la reproducción macro se detendrá automáticamente. Se guarda999@a
por ejemplo.fuente
Grabar pulsaciones de teclas en macro @a es lo mismo que extraer el texto correspondiente a esas pulsaciones de teclas para registrar a. Una vez que algo se almacena en un registro, puede ponerlo o reproducirlo como una macro / pulsaciones de teclas. Entonces, puede comenzar a grabar una macro en @a a través de
qa
, luego, mientras la macro está grabando, tire algo de texto para registrar b, tal vez usando algo como"bye
. Todo lo que hace es tirar el texto a un registro diferente al que haría si no especificara el registro b. Ahora que el registro b tiene texto, puede reproducir ese texto como teclas pulsando@b
. Incluso puede hacerlo mientras macro @a todavía se está grabando. ¡Es metamacrolicioso!La principal desventaja de esto es que probablemente sería más fácil escribir alguna función de vimscript que haga lo que desea, y luego tal vez llamarlo durante una grabación de macro. La belleza de las macros es que puedes ver el efecto de lo que estás grabando mientras lo grabas, pero esta técnica de meta macro grabación te lo quita un poco.
fuente