Busque y reemplace cadenas en vim en varias líneas

Resuelto Anshul Goyal asked hace 10 años • 11 respuestas

Puedo hacerlo :%s/<search_string>/<replace_string>/gpara reemplazar una cadena en un archivo o :s/<search_string>/<replace_string>/para reemplazar en la línea actual.

¿Cómo puedo seleccionar y reemplazar palabras de líneas selectivas en vim?

Ejemplo: reemplazar texto de líneas 6-10, 14-18pero no de 11-13.

Anshul Goyal avatar Nov 15 '13 13:11 Anshul Goyal
Aceptado

Reemplaza todo:

:%s/foo/bar/g

Encuentre cada aparición de 'foo' (en todas las líneas) y reemplácela con 'bar'.

Para líneas específicas:

:6,10s/foo/bar/g

Cambie cada 'foo' a 'bar' para todas las líneas desde la línea 6 hasta la línea 10 inclusive.

Jayanth Ramachandran avatar Nov 15 '2013 06:11 Jayanth Ramachandran

El :&&comando repite la última sustitución con las mismas banderas. Puede proporcionarle los rangos adicionales (y concatenar tantos como desee):

:6,10s/<search_string>/<replace_string>/g | 14,18&&

Sin embargo, si tienes muchos rangos , prefiero usar un bucle:

:for range in split('6,10 14,18')| exe range 's/<search_string>/<replace_string>/g' | endfor
Ingo Karkat avatar Nov 15 '2013 07:11 Ingo Karkat

Como nota al margen, en lugar de tener que escribir los números de línea, simplemente resalte las líneas donde desea buscar/reemplazar en uno de los modos visuales:

  • VISUALmodo ( V)
  • VISUAL BLOCKmodo ( Ctrl+ V)
  • VISUAL LINEmodo ( Shift+ V, funciona mejor en su caso)

Una vez que haya seleccionado las líneas para reemplazar, escriba su comando:

:s/<search_string>/<replace_string>/g

Notarás que el rango '<,'>se insertará automáticamente:

:'<,'>s/<search_string>/<replace_string>/g

Aquí '<simplemente significa primera línea resaltada y '>última línea resaltada .

Tenga en cuenta que el comportamiento puede ser inesperado en el NORMALmodo: '<y '>apunte al inicio y al final del último resaltado realizado en uno de los VISUALmodos. En cambio, en modo, se puede utilizar NORMALel número de línea especial , que simplemente significa línea actual . Por lo tanto, puede buscar/reemplazar solo en la línea actual de esta manera:.

:.s/<search_string>/<replace_string>/g

Otra cosa a tener en cuenta es que insertar un segundo :entre el rango y el comando buscar/reemplazar no hace daño; en otras palabras, estos comandos seguirán funcionando:

:'<,'>:s/<search_string>/<replace_string>/g
:.:s/<search_string>/<replace_string>/g
Attila O. avatar Jun 02 '2015 14:06 Attila O.

Buscar y reemplazar

:%s/search\|search2\|search3/replace/gci

g => búsqueda global

c => Solicitar confirmación primero

i => No distingue entre mayúsculas y minúsculas

Si desea un reemplazo directo sin confirmación, utilice el siguiente comando

:%s/search/replace/g

Si desea confirmación para cada reemplazo, ejecute el siguiente comando

:%s/search/replace/gc

Primero solicite confirmación; aquí la búsqueda no distinguirá entre mayúsculas y minúsculas.

:%s/search/replace/gci
Rahul Ravi avatar Apr 22 '2020 04:04 Rahul Ravi