2012-05-17 23 views
16

el fin de reemplazar cada aparición de "&" a "& &" en el rango de la línea actual a 30 líneas más adelante, expido :.,+30s/\\&/\\&\\&/g pero Vim dice "Patrón no encontrado ". Estoy escapando del carácter especial "&" con doble barra invertida "\".vim: buscar y reemplazar por "&"

Respuesta

13

Trate de no escapar de todo - :.,+30s/&/&&/g parece funcionar para mí.

+12

Para aclarar: esto no es porque '&' no es un metacarácter: mientras que en el patrón es verdadero (a menos que 'y' se haya escapado o el modo muy mágico esté activado), en la cadena de reemplazo '&' significa lo mismo que '\ 0': la subcadena completa combinada. Como "toda la subcadena combinada" es un ampersand en sí, esta solución funciona. Tenga en cuenta también que si la opción 'mágica' se desactivó, la instrucción "& en reemplazo representa el patrón emparejado completo" es falsa en una serie de comandos que incluyen ': s'. – ZyX

10

No necesita escapar del signo y en la primera parte de una expresión regular. Solo tiene un significado especial en la segunda parte (reemplazar).

Está buscando patrones que digan "\ &" y reemplácelos con patrones que digan "\ & \ &".

La forma más sencilla para reemplazar es simplemente:

:.,+30s/&/&&/g 
1

También puede ser útil la observación de que si es necesario cambiar la posición & por ejemplo: _& a &_ la & tiene que ser escapado solo en las declaraciones de sustitución de la expresión sustituta:

:.,+30s/ &/\& /g 
     ^