1. No es difícil lograr el comportamiento mediante una sustitución de dos pasos:
:,$s/BEFORE/AFTER/gc|1,''-&&
Primero, el comando de sustitución se ejecuta para cada línea comenzando desde la actual hasta el final del archivo:
,$s/BEFORE/AFTER/gc
Luego, ese :substitute
comando se repite con el mismo patrón de búsqueda, cadena de reemplazo y banderas, usando el :&
comando (ver :help :&
):
1,''-&&
Este último, sin embargo, realiza la sustitución en el rango de líneas desde la primera línea del archivo hasta la línea donde se estableció la marca de contexto anterior, menos uno. Dado que el primer :substitute
comando almacena la posición del cursor antes de iniciar los reemplazos reales, la línea a la que se dirige ''
es la línea que era la actual antes de que se ejecutara el comando de sustitución. (La ''
dirección se refiere a la
'
pseudo-marca; consulte :help :range
y :help ''
para obtener más detalles).
Tenga en cuenta que el segundo comando (después del |
separador de comandos, consulte
:help :bar
) no requiere ningún cambio cuando el patrón o las banderas se modifican en el primero.
2. Para ahorrar algo de escritura, para que aparezca el esqueleto del comando de sustitución anterior en la línea de comando, se puede definir un mapeo en modo normal, así:
:noremap <leader>cs :,$s///gc\|1,''-&&<c-b><right><right><right><right>
La <c-b><right><right><right><right>
parte final es necesaria para mover el cursor al principio de la línea de comando ( <c-b>
) y luego cuatro caracteres a la derecha ( <right>
× 4), poniéndolo así entre los dos primeros signos de barra, listo para que el usuario comience a escribir el patrón de búsqueda. . Una vez que el patrón deseado y el reemplazo están listos, el comando resultante se puede ejecutar presionando
Enter.
(Se podría considerar tener en //
lugar de ///
en el mapeo anterior, si se prefiere escribir el patrón, luego escribir la barra inclinada de separación, seguida de la cadena de reemplazo, en lugar de usar la flecha derecha para mover el cursor sobre una barra inclinada de separación ya presente que comienza la pieza de repuesto.)
\vpattern
- patrón 'muy mágico': los caracteres no alfanuméricos se interpretan como símbolos regex especiales (no es necesario escapar)