¿Cómo se escapan las barras diagonales inversas y las barras diagonales en la búsqueda / búsqueda de VIM?


96

Por ejemplo, si quisiera buscar y reemplazar con cadenas que contienen barras inclinadas hacia atrás o hacia adelante, ¿cómo se lograría esto en vim? ¡Gracias!

Ejemplos Buscar y reemplazar es: :%s/foo/bar/g

¿y si quisiera encontrar todas las apariciones de <dog/>y reemplazarlo con<cat\>


3
No es estrictamente una respuesta, pero probablemente deberías leer: ayuda mágica
— Tom Morris

+1 Tom, generalmente la solución más sensata cuando se trabaja con una expresión regular más que trivial.
— Randy Morris

@Tom @Randy sin embargo ... vi --helpen mi servidor NO proporciona una explicación de los caracteres especiales de escape ... por eso la gente viene a stackoverflow para empezar ...
— aequalsb

@aequalsb :help magices algo que escribes dentro de vim. No es un argumento de línea de comandos para vim.
— doubleDown

Respuestas:


150

De la misma manera que se escapan los caracteres en la mayoría de los demás programas de linuxy, con una barra invertida:

:%s/<dog\/>/<cat\\>

Pero tenga en cuenta que puede seleccionar un delimitador diferente en su lugar:

:%s@<doc/>@<cat\\>@

Esto le ahorra tener que escribir todas esas barras invertidas confusas y que consumen mucho tiempo en patrones con un montón de barras.

De la documentación :

En lugar del /que rodea el patrón y la cadena de reemplazo, puede usar cualquier otro carácter de un solo byte, pero no un carácter alfanumérico \, "o |. Esto es útil si desea incluir un /en el patrón de búsqueda o en la cadena de reemplazo.


1
¿Entonces averiguará automáticamente el delimitador elegido?
— Stormist

11
Si. El carácter después de sse toma como delimitador. No puedo averiguar dónde encontré una lista en la documentación, pero estoy bastante seguro de que al menos /:;*%@#son válidas.
— Cascabel

Esto resulta útil cuando se reemplaza \ en / en un archivo con muchas rutas al estilo de Windows. Gracias.
— Isaac Nequittepas

Para llegar a ese mensaje en la documentación, use: h e146
— jcollado

¡No tenía idea de que podía cambiar el delimitador! Eso es enorme, gracias.
— Brettins

22
%s:<dog/>:<cat>

Puede reemplazar los delimitadores / si se vuelven molestos para ciertos patrones.


3
+1 para :delimitador. No sabía que podrías usar eso. Siempre usé @en tiempos de 'desastre de escape'
— Jeffrey Jose

8

Cítelos con una barra invertida. Además, a menudo resulta útil utilizar otro delimitador además de la barra.

 :%s#<dog/>#<cat\\>#

o si tiene que usar una barra inclinada como delimitador de comando sustituto

 :%s/<dog\/>/<cat\\>/


2

Estaba buscando algo similar, buscar valores de registro que contengan el /carácter (para grabar una macro). La solución fue buscar usando el ?token en lugar del /.


Tenga en cuenta que ?hará una búsqueda hacia atrás, y no es lo mismo.
— Martin Tournoij

-1

barra invertida barra barra invertida estrella

/(<- the prompt)\/\*

así que después de escribir parece

/\/\*

1
¿En qué se diferencia esta respuesta de las que han estado en el sitio durante casi seis años?
— Martin Tournoij
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.