2015-05-03 8 views
7

ich einen Ersatz-Befehl für vim vor kurzem gefunden, wo der Autor die / durch ein ! wie diese ersetzt hatte: :%s!foo!bar und ich verstehe nicht den Unterschied mit den traditionnal :%s/foo/bar.Vim, was die Verwendung von Ausrufezeichen in Ersatz-Befehl ist

Ich suchte einige Dokumentation über diese Syntax, aber ich fand nichts relevantes, also versuchte ich, selbst zu experimentieren, und ich konnte den Unterschied zwischen den zwei Formen nicht klar herausfinden. Hier ist, was ich gefunden habe:

  • Sie nicht / und ! im selben Befehl mischen. Zum Beispiel: :%s/foo!bar wird fehlschlagen.
  • Das Zeichen ! kann mit Mustern einschließlich einer / nützlich sein. Zum Beispiel, wenn ich </ durch % in meiner Datei ersetzen möchte, kann ich :%s!</!%!g statt :%s/<\//%/g tun: Ich muss / im ersten Befehl nicht entkommen, aber ich würde überrascht sein, wenn das die einzige Verwendung von ! war.
  • Einige Regex scheint mit / zu scheitern und arbeiten mit ! Property aber ich bin weit davon entfernt, ein Regex-Master zu sein Ich bin mir nicht sicher über diesen Punkt.

Also meine Frage ist: Was ist der Unterschied zwischen / und ! in vim Substitution und wann sollte ich eine statt des anderen?

+0

Diese Frage wurde [auch bei vi.stackexchange veröffentlicht] (http://vi.stackexchange.com/q/3156/51). – Carpetsmoker

+0

In der Tat habe ich aus Versehen eine Doppelpost gemacht, die ich auf vim markiert habe, um zu wissen, was ich tun soll. – statox

Antwort

11

Beide können verwendet werden, solange sie konsistent sind (nicht gemischt). Normalerweise wird / verwendet. Ein anderes Zeichen kann jedoch verwendet werden, wenn die Zeichenfolge, die Sie ersetzen möchten, mehrere / enthält. Zum Beispiel:

:%s!/usr/local/bin!/usr/bin! 
:%s:/usr/local/bin:/usr/bin: 
:%s,/usr/local/bin,/usr/bin, 
+0

Ok danke für deine Antwort! Wo kann ich eine Liste der Char finden, die als Trennzeichen verwendet werden kann? Oder die, die nicht benutzt werden können? – statox

+1

@statox, es ist dokumentiert in ': help E146' (aus': help change.txt'). – tivn

+0

Genau das habe ich gesucht! Danke vielmals! – statox

Verwandte Themen