Standardmäßig verwenden die Einfügebefehle das "
Register ("unnamed") . Tatsächlich schreibt jeder Befehl, der in ein Register schreibt, auch in das unbenannte Register. Daher wirken sich alle Vorgänge, Löschungen und Änderungen auf das Register aus. Aus diesem Grund fügt Ihre Sequenz zum Einfügen von Ruckeln und Löschen den gelöschten Text anstelle des Textes mit Ruckeln ein.
Das 0
Register kann hier helfen. Jegliche Yank-Befehle, die kein Register angeben, setzen den Text in das Register 0
(zusätzlich zu "
). Es ist nicht von Lösch- oder Änderungsvorgängen betroffen. Sie können es also verwenden, um eine gezerrte Linie mehrmals einzufügen, selbst wenn Sie zwischenzeitliche Lösch- oder Änderungsvorgänge ausführen.
yy
: Register 0
und "
beide haben jetzt die gezerrte Linie.
- Wechseln Sie zu einer Zeile, die ersetzt werden soll.
dd
: "
Jetzt registrieren hat die gelöschte Linie, aber registrieren hat 0
noch die gezerrte Linie.
"0P
: Füge die ursprünglich gezerrte Linie aus dem Register ein 0
.
- Zum Ersetzen in die nächste Zeile wechseln.
dd"0P
(das gleiche wie oben)
(Aufgrund der Funktionsweise der Cursorpositionierung beim Ersetzen der letzten Zeile eines Puffers möchten Sie "0p
statt "0P
.)
Dies kommt Bruce Edigers Antwort sehr nahe , mit der Ausnahme, dass Sie beim anfänglichen Ziehen kein Register angeben müssen. Die Verwendung eines oder mehrerer benannter Register kann jedoch sehr praktisch sein, wenn Sie (zum Beispiel) einige Zeilen durch AAA
, aber andere Zeilen durch BBB
( AAA
in Register a
und BBB
in Register setzen b
(oder eine davon in Register 0
belassen ) ersetzen müssen , und sie dann entsprechend einfügen müssen ).
Sie können auch von Paste 0
in zeilenweise visuellem Modus ( V
) mit einem Tastendruck zu speichern: V"0p
.
Wenn Sie nicht gerne tippen "0
möchten, ist eine Zuordnung möglicherweise bequemer:
noremap <Leader>p "0p
noremap <Leader>P "0P
vnoremap <Leader>p "0p
Ein alternativer Ansatz ist das Löschen in das _
Register ("blackhole") . Wenn Sie darauf löschen, ist das "
Register nicht betroffen, sodass Ihre Sequenz zum Löschen und Einfügen weiterhin den Text aus dem unbenannten Register einfügen kann.
yy
: Melde dich an 0
und "
beide haben jetzt die gerissene Leitung.
"_dd
: Keine Änderung an den Registern.
P
: Füge den ursprünglich gezogenen Text aus dem Register ein "
.
Auch hier ist eine Zuordnung möglicherweise praktischer:
noremap <Leader>d "_d
yy
(bewege dich zu der Linie, die ersetzt werden soll)S<C-r>0<Esc>
. Hat den Vorteil, mit dem.
Befehl wiederholbar zu sein .