Alternativa para escapar de las barras en la búsqueda y reemplazar cadenas largas

10

¿Hay alguna alternativa en vim search y replace para cadenas, que tener que escapar de cada carácter especial en cadena?

Por ejemplo, si quiero hacer coincidir la siguiente cadena y reemplazarla por algo

[ERROR] Login unsucessful

Entonces tengo que hacer

:%s/\[ERROR\]\ Login\ unsucessful/something/g

Y se vuelve mucho más feo y doloroso para las cadenas complejas que contienen muchos caracteres especiales

Me gustaria hacer algo como

:%s/"[ERROR] Login unsucessful"/something/g

lo que evitaría todo escape. ¿Hay alguna característica como esta?

MohitC
fuente

Respuestas:

16

Puedes usar el very-nomagicinterruptor. Ver :h \Vpara más detalles. Esto te daría %s/\V[ERROR] Login unsuccessful/something/g. También está el nomagicinterruptor \M, que es una versión más ligera \Vy no parece ser ampliamente utilizado.

También tenga en cuenta que no tiene que escapar espacios como lo hace en su ejemplo, incluso cuando no lo esté usando \V.

PhilippFrank
fuente
Gracias. Exactamente lo que quería. no conseguí esto en mi búsqueda de google, no sé por qué.
MohitC
2
@MohitC Me mapeo /para /\vhabilitar "muy mágico" para la mayoría de las búsquedas, por lo que me he mapeado //para /comenzar una búsqueda no modificada (útil para pasar por el historial de búsqueda ignorando modificadores) y /v/para /\Vapagar rápidamente toda la magia para la búsqueda.
Kyle Strand
@MohitC De hecho, mi configuración es más complicada que eso, porque también uso un complemento para usar "muy mágico" de la manera más consistente posible en todos los contextos. Mira mi respuesta aquí .
Kyle Strand
7

No necesitas escapar de los espacios. Así que esto:

:%s/\[ERROR\]\ Login\ unsucessful/something/g

en realidad debería ser:

:%s/\[ERROR\] Login unsucessful/something/g

Y, por supuesto, puede habilitar el "modo" muy nomagic para que esos caracteres especiales sean menos especiales:

:%s/\V[ERROR] Login unsucessful/something/g

Ver :help /magic.

romainl
fuente
2

Además de las banderas nomagic mencionan en otras respuestas.

Es frecuente que no necesite ser preciso en su cadena de búsqueda

Por ejemplo, para que coincida

[ERROR] Login unsucessful

Podrías usar la expresión

.ERROR. Login unsucessful

Obviamente, debe saber que sus datos no contendrán otras cadenas, que diferirán de su objetivo previsto pero que coinciden con la expresión.

RedGrittyBrick
fuente