vi correspondência de substituição

0

Eu posso combinar um regex em vi , mas quando eu adiciono a string de substituição, vi pensa que é parte da correspondência regex. Isso ocorre apesar do uso de vários delimitadores diferentes. Existe alguma maneira de evitar isso? Como exemplo, o comando a seguir corresponde e exclui a string desejada ( \a{b}[c] ):

s:\a{b}[c\]

No entanto, se eu adicionar uma string de substituição,

s:\a{b}[c\]:abc

Eu recebo o erro

E486: Pattern not found: \a{b}[c\]:abc
Portanto,

vi não está reconhecendo o delimitador que separa a regex da consulta da string de substituição. Isso acontece com uma variedade de diferentes separadores / delimitadores. Como posso garantir que vi distingue corretamente o padrão de expressão regular e a sequência de substituição?

    
por user001 22.02.2012 / 00:43

1 resposta

4

O colchete esquerdo ([) inicia uma coleção ou um conjunto de caracteres que corresponderá a qualquer um de seus membros. Uma coleção é terminada por um colchete direito (]), mas você tem a contrabarra de escape do colchete direito em seu padrão, então vi vê tudo à direita do colchete esquerdo como estando na coleção.

Se você quiser corresponder a um colchete esquerdo literal, você terá que escapar com uma barra invertida. Se, em vez disso, você quisesse criar uma coleção contendo c e \ , será necessário que a barra invertida escape do \ . Em outras palavras, seus comandos substitutos provavelmente devem parecer com isso

s:\a{b}\[c\]:abc

ou assim:

s:\a{b}[c\]:abc
    
por 22.02.2012 / 01:26

Tags