/ in vi Rechercher et remplacer?

dans vi, cherchez et remplacez, comment échappez-vous à un ‘/’ (barre oblique) pour qu’il soit correct. Dites sur un chemin.

comme: / Users / tom / documents / pdfs /

:%s//Users/tom/documents/pdfs///g --FAILS (obviously) :%s/\/Users/tom/documents/pdfs\///g -- FAILS with a trailing error :%s/'/Users/tom/documents/pdfs/'//g -- FAILS with a trailing error 

Qu’est-ce que je rate?

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

 :%s/\/Users\/tom\/documents\/pdfs\///g 

Sinon, vous pouvez faire :%s,foo/bar/baz,foo/bar/boz,g – Je n’utilise presque jamais de barres obliques à cause de la confusion qui s’échappe.

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

Vous pouvez utiliser à la place un autre caractère que la barre oblique comme séparateur. C’est pratique si votre chaîne de recherche contient beaucoup de barres obliques.

 :%s#/Users/tom/documents/pdfs/##g 

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

Je sais que cette question a plusieurs années mais, en 2014, pour les autres qui pourraient trouver la solution la plus simple, vous pouvez remplacer le délimiteur “/” par quelque chose comme “!” avant, milieu et arrière, comme ceci:

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

Très proche de la réponse de Meder … Mais je trouve que l’exclamation est beaucoup plus facile à voir comme 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.

Vous pouvez utiliser ? chercher

En cas de recherche d’un motif dans un registre et si le motif contient un caractère ‘/’, vous pouvez simplement utiliser ? commande au lieu de / command en mode normal pour démarrer la correspondance de modèle. Dans ce cas, plus besoin d’évasion pour le caractère ‘/’. (Cependant, vous devez vous échapper ‘?’ maintenant)

? cherchera dans la direction opposée à / , donc si la direction de recherche ne vous dérange pas et que votre modèle de recherche ne contient pas “?” carboniser.

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