2012-04-26 26 views
28

Por ejemplo, tener un montón de valores con un prefijo común y postfix, tales como:¿Es posible usar Buscar y reemplazar en una cadena comodín en VIM?

fooVal1Bar; 

fooVal2Bar; 

fooVal3Bar; 

En este caso, todos los nombres de variables comenzar y terminar con foo y terminar con Bar. Quiero usar un buscar y reemplazar usando los nombres de variables aleatorias encontradas entre foo y Bar. Supongamos que ya tengo variables Val1, Val2, Val3 y Val1Old, Val2Old y Val3Old Definido. Haría un encontrar un reemplazo, algo a lo largo de las líneas de:

:%s/foo<AnyString>Bar/foo<AnyString>Bar = <AnyString> + <AnyString>Old 

Esto resultaría en:

fooVal1Bar = Val1 + Val1Old; 

fooVal2Bar = Val2 + Val2Old; 

fooVal3Bar = Val3 + Val3Old; 

espero que sea claro lo que quiero hacer, no pude encontrar nada en vim help o en línea sobre el reemplazo con cadenas de comodines. Lo máximo que pude encontrar fue buscar cadenas comodín.

Respuesta

41

Creo que usted quiere

:%s/foo\(\w\+\)Bar/& = \1 + \1\Old/ 

explicación:

\w\+ encuentra una o más ocurrencias de un carácter. El anterior foo y el siguiente Barra aseguran que estos caracteres coincidentes están entre foo y Bar.

\(...\) almacena estos caracteres para que puedan ser utilizados en la parte de reemplazo de la sustitución.

& copias lo que fue acompañado

\1 es la cadena capturado en la parte \(....\).

+0

es que hay una diferencia entre el \ w \ + y *.? – dwcanillas

+7

'\ w \ +' coincide con uno o más en este conjunto: a-zA-Z0-9_ y '. *' Coincide con cero o más de cualquier cosa. – gpojd

+0

Ah bien. Eso tiene sentido. ¡Gracias! – dwcanillas

2

Debe capturar lo que desea guardar. Intentar algo como esto:

%s/\(foo\(\w\+\)Bar\);/\1 = \2 \2Old/ 

O puede limpiarlo un poco con magic:

%s/\v(foo(\w+)Bar);/\1 = \2 \2Old/ 
Cuestiones relacionadas