J'ai récemment vu une commande de remplacement où l'auteur a été /
remplacé par un !
comme ceci::s!abc!ABC!g
J'ai essayé de trouver de la documentation sur cette utilisation mais je n'ai rien trouvé de pertinent. J'ai donc essayé d'expérimenter par moi-même et encore une fois je n'ai pas pu comprendre la vraie différence entre les deux signes. Voici ce que j'ai trouvé:
- Il n'est pas possible de mélanger
!
et/
dans une commande. Par exemple:s!abc/ABC
échoue. - Il peut être utile de l'utiliser
!
pour éviter de s'échapper d'un/
dans un modèle. Par exemple, si je veux remplacer</
par%
je peux utiliser à la:%s!</!%!g
place de:%s/<\//%/g
. - Il semble que dans certains cas, certaines expressions rationnelles ne fonctionneront pas
/
et fonctionnent correctement,!
mais comme je ne suis pas vraiment un expert en expressions régulières, je n'en suis pas sûr.
Ma question est donc simple: quel est l'avantage d'utiliser !
une commande de substitution et quand dois-je décider de l'utiliser à la place de /
?
substitute
statox
la source
la source
Réponses:
De
:help :global
:Comme vous l'avez déjà imaginé à partir de votre expérimentation, il s'agit de prévenir ce que l'on appelle le " syndrome du cure-dent penché ". Considère ceci:
contre:
La deuxième forme est évidemment beaucoup plus lisible.
C'est la seule raison pour laquelle vous pouvez modifier le délimiteur; pour le rendre plus lisible pour nous les humains. L'ordinateur s'en fiche.
D'ailleurs, certains autres programmes sont encore plus flexibles, dans GNU
sed
par exemple, vous pouvez utiliserx
comme délimiteur si vous le souhaitez.sed sxaxbxg file
est le même quesed s/a/b/g file
.la source
:%s@/home/martin/test@/home/jake/x@
, car le "gras"@
permet encore plus facilement de voir où les différentes parties de la déclaration commencent / se terminent.:%s#/home/martin/test#/home/jake/x#
travaux encore meilleurs, mais ce n'est qu'une opinion personnelle.