Comment échapper aux barres obliques inverses et aux barres obliques dans VIM find / search?

96

Par exemple, si je voulais rechercher et remplacer par des chaînes contenant des barres obliques vers l'arrière ou vers l'avant, comment cela serait-il accompli dans vim? Je vous remercie!

Exemples Rechercher et remplacer: :%s/foo/bar/g

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

stormist
la source
3
Pas strictement une réponse, mais vous devriez probablement lire: aidez la magie
Tom Morris
+1 Tom, généralement la solution la plus sensée lorsque vous travaillez avec une regex plus que triviale.
Randy Morris
@Tom @Randy cependant ... le vi --helpsur mon serveur ne fournit PAS d'explication sur les caractères spéciaux qui s'échappent ... c'est pourquoi les gens viennent à stackoverflow pour commencer ...
aequalsb
@aequalsb :help magicest quelque chose que vous tapez dans vim. Ce n'est pas un argument de ligne de commande pour vim.
doubleDown

Réponses:

150

De la même manière que vous échappez les caractères presque partout ailleurs dans les programmes Linux, avec une barre oblique inverse:

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

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

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

Cela vous évite de taper tous ces contre-obliques fastidieux et déroutants dans des motifs avec une tonne de barres obliques.

De la documentation :

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

Cascabel
la source
1
Donc, il déterminera automatiquement votre délimiteur choisi?
stormist
11
Oui. Le caractère après le sest considéré comme le délimiteur. Je ne peux pas savoir où j'ai trouvé une liste dans la documentation, mais je suis sûr qu'au moins /:;*%@#sont valides.
Cascabel
Ceci est pratique lors du remplacement de \ dans / dans un fichier avec de nombreux chemins de style Windows. Merci.
Isaac Nequittepas
Pour accéder à ce message dans la documentation, utilisez: h e146
jcollado
Je n'avais aucune idée que vous pouviez changer le délimiteur! C'est énorme - merci.
Brettins
22
%s:<dog/>:<cat>

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

Sarah
la source
3
+1 pour :délimiteur. Je ne savais pas que vous pouviez utiliser ça. J'ai toujours utilisé @en période de `` désordre d'évasion ''
Jeffrey Jose
8

Citez-les avec une barre oblique inverse. En outre, il est souvent utile d'utiliser un autre délimiteur en plus de la barre oblique.

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

ou si vous devez utiliser une barre oblique comme délimiteur de commande de remplacement

 :%s/<dog\/>/<cat\\>/
marcher
la source
3

La syntaxe est:

:%s/<dog\/>/<cat\\>/g
Maurizio Reginelli
la source
2

Je cherchais quelque chose de similaire, pour rechercher des valeurs de registre contenant le /caractère (pour enregistrer une macro). La solution était de rechercher en utilisant le ?jeton au lieu du /.

Fernando
la source
Notez que ?cela fera une recherche en arrière, et ce n'est pas la même chose.
Martin Tournoij
-1

barre oblique inverse barre oblique inverse étoile

/(<- the prompt)\/\*

donc après avoir tapé ça ressemble à

/\/\*
jim k
la source
1
En quoi cette réponse est-elle différente de celles qui sont sur le site depuis près de six ans?
Martin Tournoij