Ich habe Blöcke folgender Form:
String that is not supposed to be enclosed in quotes
String that is supposed to be enclosed in quotes
String that is not supposed to be enclosed in quotes
String that is supposed to be enclosed in quotes
String that is not supposed to be enclosed in quotes
String that is supposed to be enclosed in quotes
String that is not supposed to be enclosed in quotes
String that is supposed to be enclosed in quotes
Ich muss die Zeilen, die besagen, dass sie in Anführungszeichen eingeschlossen werden sollen, in Anführungszeichen setzen:
String that is not supposed to be enclosed in quotes
"String that is supposed to be enclosed in quotes"
String that is not supposed to be enclosed in quotes
"String that is supposed to be enclosed in quotes"
String that is not supposed to be enclosed in quotes
"String that is supposed to be enclosed in quotes"
String that is not supposed to be enclosed in quotes
"String that is supposed to be enclosed in quotes"
Gibt es eine halbautomatische Möglichkeit, dies mit Vim zu tun? Ich dachte, dass eine mögliche Lösung den g
Befehl beinhalten könnte.
Antwort1
Verwenden regulärer Ausdrücke:
:%s/.*is supposed.*/"&"/
Wenn Sie mit „halbautomatisch“ meinen, dass Sie vor jeder Ersetzung gefragt werden möchten, fügen Sie /c
dem Ersetzungsmuster einfach den Modifikator hinzu:
:%s/.*is supposed.*/"&"/c
Erläuterung
:%s
bedeutet, diese Ersetzung auf alle Zeilen im aktuellen Puffer anzuwenden- Das Muster, das wir abgleichen, ist jede Zeile, die die Wörter enthält
is supposed
(wenn einige andere Zeilen die Wörter "sollte" enthalten, ohne dass "in Anführungszeichen eingeschlossen werden" folgt, können Sie das Muster jederzeit ändern in.*is supposed to be enclosed in quotes.*
- Die Zeichenfolge, die wir zum Ersetzen des übereinstimmenden Musters verwenden, ist
"&"
, wobei&
für das steht, was mit dem Muster übereinstimmt.
Antwort2
Die BerühmtenSurround-Pluginbietet verschiedene Zuordnungen, die dies schnell und einfach machen. Um eine ganze Zeile (ohne Einzug) zu zitieren, verwenden Sie einfach yss"
. Sie können dies automatisch auf alle passenden Zeilen Ihres Beispieltexts anwenden, indem Sie den :global
Befehl und verwenden :normal
:
:g/is supposed/normal yss"
Oder führen Sie einfach eine Suche nach übereinstimmenden Zeilen durch und wiederholen Sie den Vorgang über n
und.
Antwort3
Ich bevorzuge fast immer Makros gegenüber Suchen und Ersetzen, da sie leistungsfähiger sind und man sich weniger merken muss, während man trotzdem die Möglichkeit hat, interaktiv zu prüfen, bevor man etwas tut. Versuchen Sie dies in der ersten Zeile, die Sie ändern möchten (geben Sie nicht die Leerzeichen ein, die ich der Lesbarkeit halber um ESC und ENTER gesetzt habe):
qqI" ESC $bea" ESC /is supposed ENTER zzq
Was es macht:
qq
startet ein Makro mit dem Namen „q“ (qa würde das Makro „a“ starten)I" ESC
Fügt ein " vor dem ersten Wort ein, nicht am Anfang der Zeile wie es bei "0" der Fall wäre, wodurch der dort normalerweise wertvolle Leerraum erhalten bleibt.$bea" ESC
Geht zum Zeilenende ($), geht dann aber ein Wort zurück (b) und wieder vorwärts bis zum Ende (e) und hängt schließlich (a) das " an. Dieses Manöver fügt nach dem letzten Wort der Zeile an, selbst wenn am Ende ein normalerweise nutzloses Leerzeichen steht./is supposed
Nach der Bearbeitung sucht es nach der nächsten Instanz von „sollte“, die viele Seiten weiter unten liegen könnte, und positioniert den Cursor dort, damit Sie ihn sich ansehen und entscheiden können, ob Sie die Bearbeitungen fortsetzen möchten. Wenn kein „sollte“ gefunden wird, wird das Makro ohne Schaden beendet.zzq
zentriert die Zeile schön auf der Seite (zz), sodass Sie ein paar Zeilen über die aktuelle hinaus sehen können. Nützlich, wenn Sie das Makro schnell anwenden und ein paar Schritte vorausschauen möchten. „q“ beendet die Definition des Makros, das zufällig auch „q“ genannt wird.
Wie benutzt man:
- Die erste Zeile wurde bereits geändert, als die Definition des Makros oben abgeschlossen war.
- Sollte ein Fehler auftreten, kannst du diese Zeile einfach rückgängig machen und es erneut versuchen.
- Der Cursor befindet sich jetzt auf der zweiten Übereinstimmung (sofern vorhanden) und ist schön zentriert auf der Seite.
- Sie können das Makro (oder andere, ähnliche Makros!), wenn Sie möchten, mit @q anwenden, wodurch die Zeile bearbeitet und Sie zur dritten Übereinstimmung positioniert werden.
- Sie können das letzte Makro mit @@ erneut anwenden (schneller als @q).
- Sie können mehrere auf einmal ausführen, z. B.: 111@@. Denken Sie daran, dass bei JEGLICHEM Fehler während der Anwendung des Makros keine weiteren Wiederholungen möglich sind.
- Oder Sie können mit Bild ab und Co. manuell vorspulen und das Makro erneut anwenden.
- Und Sie können die Makros mit beliebigen anderen Bearbeitungen verknüpfen.
- Und Sie können mit :tab als Nächstes dieses Makro auf andere Puffer oder Dateien anwenden.
- Das Sahnehäubchen: Das Makro bleibt auch nach dem Beenden von vim gespeichert!
Sobald Sie mit Makros vertraut sind, verfügen Sie über erstaunliche Fähigkeiten!
Antwort4
Die reguläre Ausdrucksversion funktioniert, wenn Ihre Zeilen wirklich so sind und es eine eindeutige Zeichenfolge gibt, die identifiziert, welche Zeilen welche sind. Andernfalls können wir Folgendes aufzeichnen:Makrozu tun, was Sie wollen.
Gehen Sie dazu an den Anfang der zweiten Zeile und drücken Sie:
qq I" Escape A" Escape 3j q
Dadurch wird die erste Zeile zitiert und wir gelangen zur nächsten Zeile, die wir uns ansehen möchten. Dann können Sie drücken, @q
um alle gerade ausgeführten Aktionen erneut abzuspielen oder sie beispielsweise 5@q
fünfmal auszuführen.
Wie das funktioniert: q
ist der Befehl zum Starten der Aufzeichnung eines Makros, den wir auch aufrufen q
(Sie können einen beliebigen Buchstaben auswählen). In diesem Makro fügen wir am Anfang der Zeile ein doppeltes Anführungszeichen ein ( I"
), verlassen den Einfügemodus (Escape), hängen am Ende der Zeile ein doppeltes Anführungszeichen an ( A"
) und verlassen den Einfügemodus wieder. Wir gehen drei Zeilen nach unten ( 3j
) zur nächsten Zeile, die in Anführungszeichen gesetzt werden soll. q
stoppt die Aufzeichnung des Makros.
Danach sind wir wieder genau da, wo wir angefangen haben, also können wir das Makro ( @
), das wir unter gespeichert haben, ausführen, um q
es für das nächste Zeilenpaar erneut auszuführen. Mit einer Zählung vor dem @
, wie in 5@q
, führen wir es so oft aus.
Wenn 3j
der Abstand unregelmäßig ist, können Sie statt verwenden }}k
: Gehen Sie zwei Absätze nach unten bis zur Leerzeile über den nächsten (}}
) und zurück ( k
). Die Ausführung des Makros ist in beiden Fällen gleich.
Tatsächlich können Sie jede beliebige Aktionsreihe aufzeichnen, die das gewünschte Ergebnis bringt und Sie dorthin zurückbringt, wo Sie hinwollten. Solange die Schritte, die Sie ausführen, in jedem Kontext, in dem Sie sie ausführen, sinnvoll sind, können Sie ein Makro starten, alle erforderlichen Änderungen vornehmen und zum nächsten Ort wechseln, dann das Makro stoppen und wiederholen.