¿Cómo hacer coincidir una palabra que termina con mayúscula y una letra específica?

9

Tengo palabras como lblSERINOden oraciones. Las palabras están separadas por espacios en blanco.

Quiero reemplazar el dal final de todas esas palabras con u. Así, por ejemplo, lblSERINOdse verá así lblSERINOu.

Lo he intentado s/.*\ud /u /gpero Vim dice que no puede encontrarlo .*\ud.

¿Cuál es el problema aquí?

Utku
fuente

Respuestas:

10

Una forma de hacerlo sería esta:

:%s/\u\zsd\>/u/g

Al principio supuse que el nuevo motor de expresiones regulares Vim (que se anuncia como "más rápido, pero limitado") no se puede entender \uen :substitute, pero este no es el caso. Yo más bien creo ahora que el PO se olvidó de usar %y simplemente buscado en la línea equivocada; esto explicaría el mensaje de error, pero, por supuesto, aún debe confirmarse como "la" causa.

VanLaser
fuente
2
¿estás seguro de lo del motor 're'? No veo cómo esto hace la diferencia.
Christian Brabandt
No, no estoy seguro en absoluto ... Hice una prueba rápida que no funcionó, luego volví a leer sobre patternel archivo de ayuda, vi mencionado que el nuevo motor es más limitado que el anterior, asumí que esa es la causa ... mi primera prueba fue bastante / posiblemente defectuosa
VanLaser
5

Parece que puede haber cambiado la 'magic'opción de Vim de su valor predeterminado a 'nomagic'. Puedes verificar esto con el comando

:verbose set magic?

Como se documenta en : help / magic , 'nomagic'hace que el .en una expresión regular se trate como un punto literal en lugar del metacarácter que significa "coincidir con cualquier carácter".

Me altamente recomendable dejar esta opción en su valor predeterminado. Esta es una de las pocas opciones que realmente no debería existir y puede causar problemas sutiles en los complementos.

jamessan
fuente