Mehrere Zeilen in Anführungszeichen einschließen Vim

Mehrere Zeilen in Anführungszeichen einschließen Vim

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 gBefehl 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 /cdem Ersetzungsmuster einfach den Modifikator hinzu:

:%s/.*is supposed.*/"&"/c

Erläuterung

  • :%sbedeutet, 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 :globalBefehl 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 nund.

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:

  • qqstartet ein Makro mit dem Namen „q“ (qa würde das Makro „a“ starten)
  • I" ESCFü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" ESCGeht 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 supposedNach 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.
  • zzqzentriert 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, @qum alle gerade ausgeführten Aktionen erneut abzuspielen oder sie beispielsweise 5@qfünfmal auszuführen.

Wie das funktioniert: qist 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. qstoppt 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 qes 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 3jder 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.

verwandte Informationen