Wie überschreibe ich in vi/vim nach unten verlaufende Textzeilen?

Wie überschreibe ich in vi/vim nach unten verlaufende Textzeilen?

In vi / vim möchte ich Textzeilen weiter unten auf der Seite überschreiben. Ähnlich wie beim Überschreiben von Zeichen in einer Zeile - ich drücke R, dann füge ich ein und die Zeichen werden überschrieben, aber stattdessen möchte ich dasselbe weiter unten auf der Seite tun.

Beispiel:

Ich habe eine Datei mit folgendem Text:

 var1: 7FBzezsLKyzYmVeM
 var2: kL8RIBJVNrlEUyYV
 var3: 1FkmXFSXtH4msKnL

Ich möchte diese Zeilen durch Folgendes ersetzen:

 var1: 7PmuHKKRx9OYt9mR
 var2: nuRAS5dAKfUrvECJ
 var3: km11I7HuXOWuu43X

Normalerweise würde ich die vorhandenen Zeilen löschen und an ihrer Stelle die neuen Zeilen einfügen, oder umgekehrt.

Der neue Text stammt aus dem Einfügepuffer, unabhängig davon, ob er von woanders herübergezogen oder kopiert wurde.

Ich habe ausführlich gesucht, kann aber keinen Hinweis darauf finden, wie das geht. Selbst mit Makros fällt mir nicht ein, wie ich das anstellen soll.

Hat das schon mal jemand geschafft? Wenn das nicht möglich ist, dann ist das auch in Ordnung, ich weiß es genau.

Antwort1

Bitte versuchen Sie Folgendes:

  • Kopieren / ziehen Sie die Zeilen, die Sie kopieren möchten
  • Wechseln Sie zu dem Puffer, den Sie ändern möchten
  • gRCtrl-r0Esc

Übersetzung:

  • gRwechselt in den visuellen Ersetzungsmodus (vgl. :h gR)
  • Ctrl-r0- Einfügen aus dem Register 0(siehe :h i_CTRL-R, :h quote0)
  • Esc- verlässt den Ersetzungsmodus.

Antwort2

nicht sicher was du meinst.

gehe zur ersten passenden Zeile, dann benutze

.,.+2d
r /tmp/var
  • .,.+2dlöscht die 3. Zeile (passen Sie 2 nach Bedarf an)
  • r /tmp/varwird die Vorlagendatei lesen (einfügen).

Antwort3

Die integrierte Funktion gR(wie von @SatoKatsura vorgeschlagen) ist großartig, wenn die Länge von alt und neu identisch ist. Im allgemeinen Fall funktioniert dies jedoch nicht und es muss ein anderer Ansatz gewählt werden. Ich brauche dies so oft, dass ich ein Plugin geschrieben habe, um es zu vereinfachen und maximale Geschwindigkeit zu ermöglichen:ErsetzenMitRegister.

Dieses Plugin bietet einen Zwei-in-Eins gr-Befehl, der Text, der von einem {motion} / Textobjekt, ganzen Zeilen oder der aktuellen Auswahl abgedeckt wird, durch den Inhalt eines Registers ersetzt; der alte Text wird in das Black-Hole-Register gelöscht, d. h. er ist weg. Es behandelt viele Sonderfälle transparent und ermöglicht eine schnelle Wiederholung über den Standardbefehl .. Falls es Ihnen nicht gefällt, finden Sie auf der Seite Links zu Alternativen.

verwandte Informationen