¿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\>

tempestuoso
fuente
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.

Cascabel
fuente
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.

Sarah
fuente
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\\>/
Wallyk
fuente
3

La sintaxis es:

:%s/<dog\/>/<cat\\>/g
Maurizio Reginelli
fuente
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 /.

Fernando
fuente
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

/\/\*
jim k
fuente
1
¿En qué se diferencia esta respuesta de las que han estado en el sitio durante casi seis años?
Martin Tournoij