106 votes

Comment échapper aux barres obliques inverses et aux barres obliques avant dans la recherche et le repérage de VIM ?

Par exemple, si je voulais faire une recherche et un remplacement avec des chaînes de caractères contenant des barres obliques inverses ou avant, comment cela pourrait-il être réalisé dans vim ? Merci !

Exemples Find & Replace est : :%s/foo/bar/g

Et si je voulais trouver toutes les occurrences de <dog/> et le remplacer par <cat\>

3 votes

Ce n'est pas vraiment une réponse, mais vous devriez probablement lire :help magic

0 votes

+1 Tom, c'est généralement la solution la plus sensée lorsqu'on travaille avec une regex plus que triviale.

0 votes

@Tom @Randy cependant... la vi --help sur mon serveur ne fournit PAS d'explication sur l'échappement des caractères spéciaux... ce qui est la raison pour laquelle les gens viennent sur stackoverflow pour commencer...

164voto

Jefromi Points 127932

De la même manière que vous échappez les caractères presque partout ailleurs dans les programmes linuxy, avec un backslash :

:%s/<dog\/>/<cat\\>

Mais notez que vous pouvez sélectionner un autre délimiteur à la place :

:%s@<doc/>@<cat\\>@

Cela vous évite d'avoir à taper tous ces antislashs fastidieux et déroutants dans des motifs comportant une tonne de slashs.

Desde el documentation :

Au lieu de la / qui entoure le modèle et la chaîne de remplacement, vous pouvez utiliser tout autre caractère à un octet, mais pas un caractère alphanumérique, \ , " o | . Ceci est utile si vous voulez inclure un / dans la recherche ou la chaîne de remplacement.

2 votes

Ainsi, le système déterminera automatiquement le délimiteur que vous avez choisi ?

15 votes

Oui. Le caractère après le s est considéré comme le délimiteur. Je n'arrive pas à trouver où j'ai trouvé une liste dans la documentation, mais je suis presque sûr qu'au moins /:;*%@# sont valables.

0 votes

Cela s'avère pratique pour remplacer \ par / dans un fichier comportant de nombreux chemins d'accès de style Windows. Merci.

23voto

Sarah Points 3390
%s:<dog/>:<cat>

Vous pouvez remplacer les délimiteurs / s'ils deviennent gênants pour certains motifs.

3 votes

+1 pour : délimiteur. Je ne savais pas qu'on pouvait utiliser ça. J'ai toujours utilisé @ en période de "folie d'évasion".

0 votes

@JeffreyJose Quel que soit le personnage qui suit la :s est défini comme étant le caractère de délimitation. Vous pouvez utiliser la plupart des caractères non alphanumériques (mais pas les caractères \ , " o | ). ( source )

8voto

wallyk Points 33150

Citez-les avec une barre oblique inversée. En outre, il est souvent utile d'utiliser un autre délimiteur que la barre oblique.

 :%s#<dog/>#<cat\\>#

ou si vous devez utiliser la barre oblique comme délimiteur de la commande de substitution

 :%s/<dog\/>/<cat\\>/

5voto

Fernando Points 43

Je cherchais quelque chose de similaire, pour rechercher les valeurs de registre contenant l'information suivante / (pour enregistrer une macro). La solution était d'effectuer une recherche en utilisant le ? à la place du jeton / .

3voto

Maurizio Reginelli Points 1931

La syntaxe est la suivante :

:%s/<dog\/>/<cat\\>/g

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