2012-08-16 23 views
6

veces quiero para buscar y reemplazar en vim como esto:Vim Buscar y reemplazar Eficiencia

:%s/<search_pattern>/<search_pattern>_foo/g 

¿Hay una manera de hacer esta sintaxis más eficiente para que pueda hacer referencia a <search_pattern> en el valor reemplazar? Estoy pensando que sería algo similar a las referencias anteriores por nombre/número de grupo, pero no puedo encontrar ningún documento sobre esto.

Respuesta

13

utilizar el carácter & para representar el patrón emparejado en el reemplazo:

:%s/<search_pattern>/&_foo/g 

Alternativamente se puede utilizar \0, que es una copia de referencia para todo emparejado el patrón, y por lo tanto puede ser más fácil de recordar:

:%s/<search_pattern>/\0_foo/g 

Ver :help sub-replace-special

Y, gracias a @kev, yo u puede obligar a un patrón vacío al final de la cadena de búsqueda utilizando \zs, para ser reemplazado por __foo_ en la sustitución:

:%s/<search_pattern>\zs/_foo/g 

Esto significa: sustituir el final de la cadena de búsqueda con __foo_.

+3

':% s/ \ zs/_foo/G' obras también. – kev

3

Puede usar & para todo el patrón de búsqueda, o puede usar grupos para hacer coincidir una sección del patrón. Usando &:

:%s/<search_pattern>/&_foo/g 

Esto lograr lo que usted está buscando. Si necesita algo un poco más complejo, use grupos. Para formar un grupo, rodee parte del patrón de búsqueda con paréntesis (escapado). A continuación, puede hacer referencia a eso con \n, donde n es el número de grupo. Un ejemplo lo explicaría mejor.

de tener los siguientes archivos:

bread,butter,bread,bread,bread,butter,butter,etc 

desea cambiar cualquier instancia de bread,butter a bread and butter:

:%s/\(bread\),\(butter\)/\1 and \2/g