Si quiero eliminar cada palabra, eso es fácil, porque haría algo como esto:
:s%/WORD//g
Pero, ¿qué pasa si quiero hacer xyz
cada aparición de "PALABRA"? Por ejemplo, supongamos que quiero eliminar cada línea que contiene "PALABRA". Puedo pensar en un par de formas de hacer esto, pero ninguna de ellas parece ideal.
1)
/WORD
y luego presione manualmente ddnddnddnddn...
hasta que no haya más ocurrencias. Pero esto lleva mucho tiempo si hay muchas líneas para hacerlo.
2)
qd/WORD<enter>ddq
y luego adivina cuántas veces aparece WORD, y luego, por ejemplo:
500@d
Pero esto A) perderá un montón de líneas o B) eliminará un montón de líneas adicionales.
¿Hay una mejor manera de hacer esto?
500@d
como lo describe es realmente seguro. La reproducción de la macro se detendrá una vez que no se encuentre el término de búsqueda. Entonces verá un error "Patrón no encontrado: PALABRA" después de que se hayan eliminado todas las líneas que lo contienen.Respuestas:
Puede usar los comandos
:global
y:normal
para esto. El:global
comando tiene la siguiente sintaxis:Esto ejecutará "comando" en cada aparición de "patrón". Luego puede usar el
:normal
comando para ejecutar una serie de pulsaciones de teclas en cada aparición de una palabra usando:global
. Al igual que:Si esas pulsaciones de teclas involucran teclas especiales como
<Ctrl>
, puede combinarlo con el:execute
comando de la siguiente manera:Tenga en cuenta que debe colocar una barra diagonal inversa antes de cada aparición de una tecla especial.
Para más información sobre estos comandos, vea
:help :normal
y:help :global
.fuente
Solo para completar, puede usar
:substitute
, si coincide, en su ejemplo (eliminar toda la línea que tiene WORD), la línea completa que contiene WORD, por ejemplo:Esto tiene un implícito "reemplazar coincidencia con nada", es decir, es la forma más corta de:
En combinación con
\zs
,\ze
,\(
-\)
(agrupación), y\=
(en la pieza de repuesto) consubmatch()
,:substitute
puede ser muy poderoso.fuente
Parece que lo estás buscando
:global
.fuente
:delete
y no la operación en modo normald
.:normal
. Y si necesita teclas especiales, puede que incluso necesite:exe
-> `exe" normal aFooFar \ <esc> "