En Vim, ¿cómo aplico una macro a un conjunto de líneas?
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.
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! @a
y observe que se muestra la siguiente línea de entrada.
:'<,'>norm! @a
Ingrese : ayuda normal en vim para leer más.
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
j
para pasar a la siguiente línea.
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