2009-04-21 13 views

Respuesta

50

Seleccione el texto en el modo visual (supongo que eso es lo que está haciendo), a continuación, pulse : para comenzar a escribir un comando, verá algo como esto aparecerá en la línea de comandos:

:'<,'> 

Eso significa que el comando se aplicará a la selección. Luego escriba s/search/replace/ y presione enter. (Agrega un g después de la tercera barra, si desea reemplazar todos los partidos, y una c si desea una confirmación para cada sustituir)

+28

Advertencia: ¡la gama solo funciona en línea! Si su selección contiene solo una parte de una línea, la búsqueda y el reemplazo funcionarán en toda la línea. Obtener una línea parcial para buscar y reemplazar requiere una secuencia de comandos afaik. – user55400

+2

Sugiero moverlo temporalmente a una línea diferente, hacer el reemplazo y moverlo hacia atrás. –

13

Si utilizó modo visual para seleccionar, a continuación:

:'<,'>s/regex/replacement/options 

VIM colocará la gama ('<,'>) automáticamente si usted entra en Modo Línea (pulsando ':') desde el Modo Visual.

+1

Esto debería funcionar teóricamente como se pretendía, pero como alguien más señaló, en la práctica se reemplaza en cualquier lugar dentro de las líneas donde la marca '<' comienza y donde '>' termina. Tal vez sea posible hacer que funcione con el átomo '\% '>' pero mis experimentos iniciales fallaron. –

+0

Tienes razón. Nunca me di cuenta. – Tomalak

-3

Si usted quiere hacer un búsqueda global y reemplazar (con expresiones regulares opcionales) para todas las instancias en el archivo, haría lo siguiente:

:%s/foo/bar/g 

Omitir el g para hacer un reemplazo local.

+0

El local es local a la línea actual – Lazarus

66

La mayoría de las otras soluciones sugeridas aquí funcionan sobre la línea ENTERA en la que ocurre la selección, que puede no ser la que usted desea.

Para buscar y reemplazar sólo en la selección, seleccione en primer lugar visualmente el texto, a continuación, utilizar un comando de esta forma:

:%s/\%VSEARCH/REPLACE/g 

Esto va a hacer la búsqueda y reemplazo sólo en la sección seleccionada visualmente, en sustitución de SEARCH con REEMPLAZAR. Si tiene más de una línea seleccionada, esto funcionará también en varias líneas.

+0

¿Debería funcionar esto para un reemplazo al seleccionar visualmente parte de una línea? No puedo hacer que funcione para reemplazar espacios con devolución. Estoy seleccionando parte de la línea y usan ':% s/\% V/\ r/g' sin alegría. El primer espacio se reemplaza, pero los siguientes 4 permanecen intactos. – bentayloruk

+0

Acabo de probarlo, y funciona para todos los casos que probé, excepto para reemplazar con una devolución ;-) Creo que debe ser porque la primera sustitución rompe la selección en una nueva línea, que ya no está en la selección. Como solución alternativa, puede reemplazarla por una cadena única, p. EZ_REPLACE, luego haz una búsqueda global y reemplaza por eso ... –

+0

no funciona bien cuando se recodifica en una macro. reproducir la macro en un rango de líneas no funciona. –