En Vim, ¿cómo aplico una macro a un conjunto de líneas?

Resuelto Jordan Parmer asked hace 15 años • 4 respuestas

Tengo un archivo con un montón de líneas. He grabado una macro que realiza una operación en una sola línea. Quiero repetir esa macro en todas las líneas restantes del archivo. ¿Existe una forma rápida de hacer esto?

Intenté Ctrl+Q, resalté un conjunto de líneas y presioné @@, pero eso no pareció funcionar.

Jordan Parmer avatar Dec 24 '08 04:12 Jordan Parmer
Aceptado

Utilice el comando normal en modo Ex para ejecutar la macro en varias o todas las líneas:

Ejecute la macro almacenada en el registro a en las líneas 5 a 10.

:5,10norm! @a

Ejecute la macro almacenada en el registro a en las líneas 5 hasta el final del archivo.

:5,$norm! @a

Ejecute la macro almacenada en el registro a en todas las líneas.

:%norm! @a

Ejecute el almacenamiento de macros en el registro de un patrón coincidente en todas las líneas .

:g/pattern/norm! @a

Para ejecutar la macro en líneas seleccionadas visualmente, presione V y j o k hasta seleccionar la región deseada. Luego escriba :norm! @ay observe que se muestra la siguiente línea de entrada.

:'<,'>norm! @a

Ingrese : ayuda normal en vim para leer más.

Judge Maygarden avatar Dec 23 '2008 22:12 Judge Maygarden

También puedes hacer esto:

En modo normal:

[number of times to apply the macro] @ [register]

Por ejemplo:

1000@q

Aplique la macro en el registro q a las siguientes 1000 líneas.

Actualización: la respuesta aceptada es mucho mejor

Actualización: como señaló @kevinliu, es probable que desee finalizar la macro con un jpara pasar a la siguiente línea.

Max Heiber avatar Jan 03 '2014 22:01 Max Heiber

También hay un complemento llamado RangeMacro, ¡hace exactamente lo que quieres! Para todos los que no pueden adivinar por el nombre, qué hace: repite una macro grabada para cada línea en un rango determinado, ya sea por selección visual o por :40,50 / :+10

Ver http://www.vim.org/scripts/script.php?script_id=3271

phux avatar Mar 13 '2011 18:03 phux