69 votes

/ dans vi Rechercher et remplacer ?

Dans vi, rechercher et remplacer, comment échapper à un '/' (barre oblique) pour qu'il soit correct. Disons 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 ?

134voto

meder Points 81864

Vous pouvez également faire :%s,foo/bar/baz,foo/bar/boz,g - J'ai presque jamais utilisent des barres obliques en raison de la confusion liée à l'échappement.

1 votes

Mec, je ne savais pas ça ! Je suppose que tu peux utiliser n'importe quel caractère pour délimiter les champs alors ?

0 votes

Oui, je crois, je me suis juste habitué aux virgules.

0 votes

Vous m'avez battu de quelques secondes :)

70voto

Sarah Vessels Points 8195

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

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

19voto

Bob Points 551

Comme Sarah l'a suggéré, vous devez échapper TOUS les slashs avant.

Vous pouvez utiliser un autre caractère que le forward-slash comme délimiteur. C'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% pour vanilla vi.

0 votes

Je ne vois pas comment on pourrait avoir accès à Vi de nos jours. Je pense que la plupart des distros Linux majeures redirigent simplement 'vi' vers vim avec beaucoup de fonctionnalités désactivées.

2 votes

Parce que linux n'est pas le seul OS :) La plupart des BSD sont livrés avec vanilla vi ou nvi. La plupart des systèmes commerciaux Unix le sont également. Je me souviens (malheureusement) de l'époque où je devais compiler vim sur IRIX parce que je ne pouvais pas vivre avec vanilla vi.

0 votes

Il n'y a pas si longtemps, Debian a lié vi à nvi, tout comme NetBSD, FreeBSD et OpenBSD. Certains sont également livrés avec vim-as-vim.

7voto

CodeSlayer2010 Points 307

Je sais que cette question date de plusieurs années, mais pour les autres qui pourraient atterrir sur celle-ci en cherchant une solution plus facile, en 2014, vous pouvez remplacer le délimiteur "/" par autre chose comme " !", tant que vous le faites devant, au milieu et derrière, comme ceci :

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

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

5voto

JXITC Points 330

Vous pouvez utiliser ? pour chercher

En cas de recherche d'un motif dans un registre, et si le motif contient le caractère '/', vous pouvez simplement utiliser la fonction ? au lieu de / à partir du mode normal pour lancer le filtrage. Dans ce cas, l'échappement n'est plus nécessaire pour le caractère '/'. (cependant, vous devez échapper le caractère '?' maintenant)

? cherchera dans la direction opposée de / Si vous ne vous souciez pas de la direction de la recherche et que votre modèle de recherche ne contient pas le caractère " ?

En outre, vérifiez le escape() script si vous en voulez plus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X