web-dev-qa-db-fra.com

/ in vi Rechercher et remplacer?

dans vi, recherchez et remplacez, comment échappez-vous à un '/' (barre oblique) pour qu'il soit correct. Dis dans un chemin.

comme:/Utilisateurs/tom/documents/pdfs /

:%s//Users/tom/documents/pdfs//<new text>/g  --FAILS (obviously)

:%s/\/Users/tom/documents/pdfs\//<new text>/g -- FAILS with a trailing error

:%s/'/Users/tom/documents/pdfs/'/<new text>/g -- FAILS with a trailing error

Qu'est-ce que je rate?

54
JT.

Vous devez également échapper en interne aux barres obliques.

:%s/\/Users\/tom\/documents\/pdfs\//<new text>/g
62
Sarah Vessels

Sinon, vous pouvez faire :%s,foo/bar/baz,foo/bar/boz,g - j’ai presque jamais utiliser des barres obliques à cause de la confusion qui s’échappe.

111
meder omuraliev

Comme Sarah l'a suggéré, vous devez vous échapper de TOUTES les barres obliques.

Vous pourriez plutôt utiliser un autre caractère en plus du slash avant comme délimiteur. Ceci est pratique si votre chaîne de recherche contient beaucoup de barres obliques.

:%s#/Users/tom/documents/pdfs/#<new test>#g

Cela fonctionne parfaitement dans vim. Je ne suis pas sûr à 100% de Vanilla vi.

14
Bob

Vous pouvez utiliser ? pour rechercher

Si vous recherchez un modèle dans un registre et que celui-ci contient un caractère '/', vous pouvez simplement utiliser la commande ? au lieu de la commande / en mode normal pour démarrer la correspondance des modèles. Dans ce cas, plus aucune évasion n'est requise pour '/' char. (Cependant, vous devez vous échapper maintenant?)

? cherchera dans la direction opposée à /, donc si le sens de la recherche ne vous gêne pas, votre modèle de recherche ne contient pas '?' carboniser.

De plus, vérifiez le script escape() si vous voulez plus.

4
JXITC

Je sais que cette question a plusieurs années, mais pour les autres qui pourraient trouver la solution plus simple, en 2014, vous pouvez remplacer le délimiteur "/" par autre chose du type "!" devant, milieu et dos, comme ceci:

:%s!foo/bar/baz!foo/bar/boz!g

Très semblable à la réponse de Meder ... Mais, je trouve que l’exclamation est beaucoup plus facile à voir en tant que séparateur. Et je voulais juste confirmer que cette méthode fonctionne toujours dans la version actuelle de VIM, que j'utilise dans Mac OSX Mavericks.