Ich habe kürzlich einen Ersatzbefehl gesehen, bei dem der Autor den /
durch einen !
solchen ersetzt hat::s!abc!ABC!g
Ich habe versucht, eine Dokumentation zu dieser Verwendung zu finden, aber ich konnte nichts Relevantes finden. Also habe ich versucht, selbst zu experimentieren und konnte den wirklichen Unterschied zwischen den beiden Zeichen wieder nicht herausfinden. Folgendes habe ich gefunden:
- Es ist nicht möglich,
!
und/
in einem Befehl zu mischen . Zum Beispiel:s!abc/ABC
scheitert. - Es kann nützlich sein
!
, a/
in einem Muster nicht zu maskieren. Zum Beispiel , wenn ich will ersetzen</
mit%
mir verwenden kann ,:%s!</!%!g
statt:%s/<\//%/g
. - Es scheint, dass in einigen Fällen einige Regex nicht
/
richtig funktionieren,!
aber da ich kein Regex-Experte bin, bin ich mir dessen nicht sicher.
Meine Frage ist also einfach: Was ist der Vorteil der Verwendung !
in einem Ersatzbefehl und wann sollte ich mich dafür entscheiden, ihn anstelle von zu verwenden /
?
substitute
statox
quelle
quelle
Antworten:
Von
:help :global
:Wie Sie bereits aus Ihren Experimenten ersehen haben, soll damit das sogenannte " Leaning-Toothpick-Syndrom " verhindert werden. Bedenken Sie:
gegen:
Die zweite Form ist offensichtlich viel besser lesbar.
Dies ist der einzige Grund, warum Sie das Trennzeichen ändern können. um es für uns Menschen lesbarer zu machen. Dem Computer ist das egal.
Einige andere Programme sind übrigens noch flexibler, in GNU können Sie
sed
zum Beispielx
als Trennzeichen verwenden, wenn Sie möchten.sed sxaxbxg file
ist das gleiche wiesed s/a/b/g file
.quelle
:%s@/home/martin/test@/home/jake/x@
, da das "Fett"@
es noch einfacher macht, zu erkennen, wo die einzelnen Teile der Anweisung beginnen / enden.:%s#/home/martin/test#/home/jake/x#
funktioniert noch besser, aber das ist nur persönliche Meinung.