Alternativa para escapar de barras na pesquisa e substituir por seqüências longas

10

Existe alguma alternativa na pesquisa e substituição de strings do vim, do que ter que escapar de todos os caracteres especiais da string.

Por exemplo, se eu quiser combinar a sequência a seguir e substituir por algo

[ERROR] Login unsucessful

Então eu tenho que fazer

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

E fica muito mais feio e doloroso para cadeias complexas que contêm muitos caracteres especiais

Eu gostaria de fazer algo como

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

o que evitaria toda fuga. Existe algum recurso como este?

MohitC
fonte

Respostas:

16

Você pode usar o very-nomagicinterruptor. Veja :h \Vpara detalhes. Isso daria a você %s/\V[ERROR] Login unsuccessful/something/g. Há também o nomagicswitch \M, que é uma versão mais leve \Ve não parece ser amplamente usada.

Observe também que você não precisa escapar de espaços como no seu exemplo, mesmo quando não estiver usando \V.

PhilippFrank
fonte
Obrigado. Exatamente o que eu queria. não consegui isso na minha pesquisa no google, não sei por quê.
MohitC
2
@MohitC I Roteiro /para /\vhabilitar o "muito mágica" para a maioria das pesquisas, então eu ter mapeado //para /começar uma pesquisa sem modificações (útil para passar por modificadores histórico de pesquisa ignorando) e /v/para /\Vdesligar rapidamente toda a magia para pesquisa.
Kyle Strand
@MohitC De fato, minha configuração é mais complicada do que isso, porque eu também uso um plugin para usar "muita magia" da maneira mais consistente possível em todos os contextos. Veja minha resposta aqui .
Kyle Strand
7

Você não precisa escapar de espaços. Então, é isso:

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

realmente deve ser:

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

E, é claro, você pode ativar o "modo" muito não-mágico para tornar esses caracteres especiais menos especiais:

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

Veja :help /magic.

romainl
fonte
2

Além das bandeiras nomagic mencionadas em outras respostas.

Geralmente, você não precisa ser preciso na sua string de pesquisa

Por exemplo, para combinar

[ERROR] Login unsucessful

Você poderia usar a expressão

.ERROR. Login unsucessful

Obviamente, você deve saber que seus dados não conterão outras strings, diferindo do destino pretendido, mas correspondendo à expressão.

RedGrittyBrick
fonte