Ich habe etwas Ähnliches wie <Foobar Name='Hello There'/>
und muss die einfachen Anführungszeichen in doppelte Anführungszeichen ändern. Ich habe :s/\'.*\'/\"\0\"
ausprobiert, aber am Ende wurde <Foobar Name="'Hello There'"/>
erzeugt. Das Ersetzen von \0
durch \1
ergab nur eine leere Zeichenfolge in Anführungszeichen. Gibt es eine spezielle Syntax, die fehlt, damit nur die gefundene Zeichenfolge ("Hallo") in den Anführungszeichen zu \1
hinzugefügt wird?
Sie müssen Gruppierungen verwenden:
:s/\'\(.*\)\'/\"\1\"
Auf diese Weise entspricht Argument 1 (dh\1) dem, was durch\(und \) begrenzt wird.
Es gibt auch surround.vim , wenn Sie dies ziemlich oft machen wollen. Sie würden cs'"
verwenden, um die Anführungszeichen zu ändern.
%s/'\([^']*\)'/"\1"/g
Ansonsten möchten Sie [^']*
anstelle von .*
verwenden
'apples' are 'red'
würde in "apples' are 'red"
konvertiert
wenn ich etwas vermisse, würde s/\'/"/g
nicht funktionieren?
Nur ein FYI - um alle Anführungszeichen durch einfache Anführungszeichen zu ersetzen, ist dies der richtige reguläre Ausdruck - basierend auf dem obigen Beispiel von rayd09
:%s/"\([^"]*\)"/'\1'/g
Sie müssen runde Klammern um den Teil des Ausdrucks setzen, den Sie erfassen möchten.
s/\'\(.*\)\'/"\1"/
Möglicherweise haben Sie jedoch Probleme mit einem unbeabsichtigten Abgleich. Könnten Sie einzelne Anführungszeichen einfach durch Anführungszeichen in Ihrer Datei ersetzen?
Sie haben die richtige Idee - Sie möchten "\1"
als Ersetzungsklausel verwenden, aber Sie müssen den Teil "Hallo dort" zuerst in Erfassungsgruppe 1 einfügen (0 ist die gesamte Übereinstimmung). Versuchen:
:%/'\(.*\)'/"\1"
Vorausgesetzt, Sie möchten dies für eine gesamte Datei tun ...
N-Modus:
ggvG$ [SHIFT+:]
X-Modus:
'<,'>/'/" [RET]