2011-12-19 10 views
6

Tengo un problema con la selección visual y ejecuto una expresión regular reemplazar. Cuando selecciono un texto que no contiene toda la fila, y golpeó: llevar la línea de comandos, y hacer algo comoVim selección visual y regexp

:s/T/t/ 

A continuación, el primer partido en la línea (si está seleccionado o no) se cambia . Así, por ejemplo, no tengo el texto

Test Text here 

y selecciono visualmente la palabra texto, a continuación, ejecutar la sustitución anterior, terminar con

test Text here 

que no es lo que quiero.

¿Alguna idea de cómo lograr el resultado correcto?

Editar: La línea de comandos real es

'<,'>s/T/t/ 

como predeterminado por Vim al pulsar: con una selección visual.

Respuesta

10

Puede usar \% V (ver http://vimdoc.sourceforge.net/htmldoc/pattern.html#//%V)

\%V Match inside the Visual area. When Visual mode has already been 
    stopped match in the area that |gv| would reselect. 
    This is a |/zero-width| match. To make sure the whole pattern is 
    inside the Visual area put it at the start and end of the pattern, 
    e.g.: 
     /\%Vfoo.*bar\%V 
    Only works for the current buffer. 

Así:

:s/\%VT/t/ 

Si desea reemplazar múltiples golpes, añadir/g

:s/\%VT/t/g 
+1

de acuerdo con ': h% V', debe envolver el conjunto s patrón de búsqueda en '\% V' si desea asegurarse de que el patrón esté dentro de la selección. Me gusta: ': s/\% Vlongpattern \% V/short /'. – m0tive

+0

@ m0tive: cité la documentación sobre eso. Y, cuando el patrón es como un solo carácter que no es útil – sehe

+0

eres demasiado rápido para mí ;-) – m0tive