Frage

Ich habe so etwas wie <Foobar Name='Hello There'/> und müssen die einfachen Anführungszeichen um doppelte Anführungszeichen zu ändern. Ich habe versucht, :s/\'.*\'/\"\0\" aber es endete <Foobar Name="'Hello There'"/> produzieren. Ersetzen der \0 mit \1 nur eine leere Zeichenfolge innerhalb der doppelten Anführungszeichen produziert - gibt es eine spezielle Syntax fehlt mir, dass ich nur die gefundenen Zeichenfolge vornehmen müssen ( „Hallo There“) innerhalb der Anführungszeichen zu \1 zuweisen

War es hilfreich?

Lösung

Sie müssen Verwendung Gruppierungen:

:s/\'\(.*\)\'/\"\1\"

So Argument 1 (dh \ 1) wird, entsprechen, was auch immer wird begrenzt durch \ (und \).

Andere Tipps

Es gibt auch surround.vim , wenn Sie schauen, um tun ziemlich oft diese. Sie würden cs'" verwenden, um umschließenden Anführungszeichen zu ändern.

%s/'\([^']*\)'/"\1"/g

Sie wollen [^']* statt .* verwenden, sonst

'apples' are 'red' würde "apples' are 'red"

get umgewandelt

, es sei denn ich etwas fehle, würde nicht s/\'/"/g Arbeit?

Nur ein FYI - alle doppelten Anführungszeichen mit Einzel zu ersetzen, ist dies die richtige regexp - basierend auf rayd09 des Beispiel oben

:%s/"\([^"]*\)"/'\1'/g

Sie müssen um den Teil des Ausdrucks Sie erfassen möchten, runden Klammern setzen.

s/\'\(.*\)\'/"\1"/

Aber, könnten Sie Probleme mit ungewollten Übereinstimmungen haben. Können Sie möglicherweise keine einfachen Anführungszeichen mit doppelten Anführungszeichen in Ihrer Datei einfach ersetzen?

Sie haben die richtige Idee - Sie "\1" als Ersatz-Klausel haben wollen, aber Sie müssen zuerst den 1 „Hallo dort“ Teil in Capture-Gruppe setzen (0 ist das gesamte Spiel). Versuchen Sie:

:%/'\(.*\)'/"\1"

Vorausgesetzt, Sie dies auf eine ganze Datei ...

tun wollen

N-Modus:

ggvG$ [SHIFT+:]  

X-Modus:

'<,'>/'/" [RET]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top