Mon remplacement Vim avec une expression rationnelle lance un ' e488: caractères de fin`

J'essaie de trouver toutes les occurrences d'une poignée Twitter, et enrouler une balise d'ancrage autour d'eux.

:%s/(@[w])/<a href="http://www.twitter.com/1">1</a>/gc

Ce Qui me donne:

E488: Trailing characters
21
demandé sur Brian Dant 2013-04-05 23:34:52

3 réponses

Lorsque le caractère de séparation (/ dans votre cas) entre {pattern} et {string} est contenu dans l'un de ces, il faut l'échapper avec un \. Une astuce pour éviter cela est d'utiliser un caractère de séparateur différent, par exemple #:

:%s#@\(\w\+\)#<a href="http://www.twitter.com/\1">\0</a>#gc

PS: si elle doit faire ce que je pense qu'elle devrait faire, votre modèle est faux; voir ma correction.

24
répondu Ingo Karkat 2013-04-05 19:43:06

J'ai eu ce problème et je ne pouvais pas le faire disparaître jusqu'à ce que je découvre que le fichier .vimrc que j'avais des parties que j'ai copiées ailleurs où cela contenait des abréviations, comme ceci par exemple:

abbrev gc !php artisan generate:controller

Cette abréviation gâcherait Mes commandes de recherche et de remplacement qui ressemblent généralement à ceci:

:%s/foo/bar/gc

En élargissant ce gc en !php artisan generate:controller, sauf qu'il ne le ferait pas sur place/ en temps réel. La façon dont j'ai compris était en regardant à travers la commande historique (en appuyant sur : et la flèche vers le haut) et en voyant

:%s/foo/bar/!php artisan generate:controller

Donc, si vous obtenez des erreurs de caractère de fin, peu importe ce que vous faites, je regarderais à l'intérieur

~/.vimrc

Et voyez si vous pouvez trouver le problème là-bas.

1
répondu racl101 2016-09-07 00:09:57

:%s/\/apps/log_dir/g

Où chaîne à remplacer= / apps et remplacé string=log_dir comme nous l'avons vu / nous devons donc utiliser "\/"

1
répondu Prem S 2017-09-25 19:36:40