vi coincidencia de sustitución

0

Puedo emparejar un patrón de expresiones regulares vi, pero cuando agrego la cadena de reemplazo, creo vique es parte de la coincidencia de expresiones regulares. Esto ocurre a pesar del uso de varios delimitadores diferentes. ¿Hay alguna forma de evitar esto? Como ejemplo, el siguiente comando coincide y elimina la cadena deseada ( \a{b}[c]):

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

Sin embargo, si agrego una cadena de reemplazo,

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

Recibo el error

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

vipor lo tanto, no reconoce el delimitador que separa la expresión regular de la consulta de la cadena de reemplazo. Esto sucede con una variedad de separadores / delimitadores diferentes. ¿Cómo puedo asegurarme de que vidistinga correctamente entre el patrón regex y la cadena de reemplazo?

user001
fuente

Respuestas:

4

El corchete izquierdo ([) inicia una colección o un conjunto de caracteres que coincidirá con cualquiera de sus miembros. Una colección finaliza con un corchete derecho (]), pero se ha reducido la barra invertida al corchete derecho en su patrón, por lo que vive todo a la derecha del corchete izquierdo como parte de la colección.

Si desea hacer coincidir un corchete izquierdo literal, tendrá que escapar con una barra diagonal inversa. Si, en cambio, pretendía crear una colección que contenga a cy a \, necesitará una barra invertida para escapar de \. En otras palabras, sus comandos sustitutos probablemente deberían verse así

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

o así:

s:\\a{b}[c\\]:abc
garyjohn
fuente
Gracias, no me di cuenta de que al escapar de ]eso estaba creando efectivamente una clase de personaje sin terminar. En primer lugar, solo escapé de ese personaje porque de lo contrario no podría lograr una coincidencia. Como pude hacer coincidir sin escapar del soporte izquierdo, no consideré escapar también.
user001