
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
.,.+2d
löscht die 3. Zeile (passen Sie 2 nach Bedarf an)r /tmp/var
wird 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.