Comment faire correspondre un mot se terminant par une lettre majuscule et une lettre spécifique?

9

J'ai des mots comme lblSERINOddans les phrases. Les mots sont séparés par un espace blanc.

Je veux remplacer le dà la fin de tous ces mots par u. Ainsi, par exemple lblSERINOd, ressemblera lblSERINOu.

J'ai essayé s/.*\ud /u /gmais Vim dit qu'il ne peut pas trouver .*\ud.

Quel est le problème ici?

Utku
la source

Réponses:

10

Une façon de le faire serait la suivante:

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

Dans un premier temps, je suppose que le nouveau moteur de regex vim (annoncé comme « plus rapide, mais limitée ») ne peut pas comprendre \udans :substitute, mais ce n'est pas le cas. Je pense plutôt maintenant que l'OP a oublié d'utiliser %et a simplement cherché sur la mauvaise ligne; cela expliquerait le message d'erreur, mais doit bien sûr encore être confirmé comme "la" cause.

VanLaser
la source
2
êtes-vous sûr de la question du moteur «re»? Je ne vois pas comment cela fait une différence.
Christian Brabandt
Non, pas sûr du tout ... J'ai fait un test rapide qui n'a pas fonctionné, puis relu patterndans le fichier d'aide, vu mentionné que le nouveau moteur est plus limité que l'ancien, en supposant que c'était la cause .. mon premier test était plutôt / peut-être imparfait
VanLaser
5

Il semble que vous ayez changé l' 'magic'option de Vim par défaut en 'nomagic'. Vous pouvez vérifier cela avec la commande

:verbose set magic?

Comme indiqué dans : help / magic , 'nomagic'fait .en sorte que l' expression dans une expression rationnelle soit traitée comme un point littéral au lieu du métacaractère signifiant "correspondre à n'importe quel caractère".

Je recommande fortement de laisser cette option à sa valeur par défaut. C'est l'une des quelques options qui ne devraient vraiment pas exister et peuvent causer des problèmes subtils dans les plugins.

jamessan
la source