¿Cómo puedo grabar una macro anidada?


11

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 qse 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?


1
¿No puedes primero grabar la macro by luego grabar la macro allamada @b?
statox

@statox El problema es que btiene efectos destructivos, por lo que no puedo grabarlo primero (a menos que quiera grabarlo, presionar uvarias veces y luego comenzar a grabar a).
Pomo de la puerta

1
Creo que es tu mejor solución. Tenga en cuenta que también puede grabarlo en otro búfer ( enew, grabar bd) o editar directamente el bregistro escribiendo en su archivo el contenido de su macro y luego "grabándolo" colocando los caracteres en el registro con "by.
statox

Respuestas:


10

AFAIK, no puedes grabar dos macros de qx...quna sola vez. Para su requerimiento, debe crear macro bpor qb....qentonces qa...@bq.

Si no desea "grabar" b, puede let @b='whatever'volver @ba reproducir la macro. Por ejemplo, let @b='ggdG'defina una macro bpara 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 guarda 999@apor ejemplo.


1

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.