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 .Kevin hat anscheinend eine ziemlich gute Antwort, aber wenn Sie jede Zeile, die Sie löschen, im Auge behalten möchten, dann ersetzen Sie sie, es gibt eine etwas andere Lösung.
Mit dieser Art von Rezept können Sie mithilfe der Mustererkennung nach zu löschenden und zu ersetzenden Zeilen suchen und so oft Sie möchten zum Anfang der Datei zurückkehren (1G) und vorwärts suchen. Wenn ich zwei oder mehr Zeilen sammeln und wiederholt platzieren muss, verwende ich
"ayy
für die erste Zeile,"byy
für die zweite,"cyy
für die dritte usw. Ich habe es mir zur Gewohnheit gemacht (was die Allgemeingültigkeit des Rezepts verringert), die mentale Belastung für mich zu verringern.quelle
"ayy
und dann benutzedd
,dd
wird nicht ersetzt, was in ista
, aber wenn ich tippep
, wird eingefügt, was gerade mit gelöscht wurdedd
. Und wenn ich ersetzen wollte, was in dem ist,"ayy
was ich lösche, dann würde ich verwenden"add
- ist das richtig?Es gibt verschiedene Möglichkeiten, dies zu tun
:s
, je nachdem, wie viel Sie tippen möchten. Der einfachste Weg ist ein einfaches Suchen und Ersetzen:Das
%
durchsucht die gesamte Datei und ersetzt alle Vorkommen.Wenn Sie zu viel tippen, können Sie die Zielzeichenfolge (
yy
) ziehen und das"
(Standard-) Register verwenden, indem Sie Folgendes einfügen Ctrl+r ":Oder, wenn Sie eine Kopie der Ersatzzeichenfolge haben, können Sie die beiden in getrennten Registern mit zerren
"ayy
und"byy
reißen in diea
undb
Register, bzw. (können Sie jeden Buchstaben für Ihre Register verwenden). Verwenden Sie dann Ctrl+r aund, Ctrl+r bum sie in die Such- und Ersetzungsfelder einzufügen.Nicht für den Einzelnen Bruce, aber wenn Sie die Zeilen überprüfen möchten, bevor Sie sie ersetzen, fügen Sie einfach die folgende
c
Option hinzu:quelle
Sie können
V
die Zeile markieren, die Sie im visuellen Modus ersetzen möchten, und dannpp
drücken, um sie über dieser Zeile einzufügen.Dies fügt nur einen Tastendruck hinzu, daher scheint es eine ziemlich gute Lösung zu sein.
quelle
V
p
.Ich benutze den
c
"change" -Befehl ziemlich häufig für diese Art von Dingen, kombiniert mit der regulären Suche. Sie können die Datei nach jeder Zeile / jedem Textabschnitt durchsuchen, an dem Sie interessiert sind, und dann aufeinanderfolgenden.
Befehle verwenden (n
für die nächste und dann.
die letzte Änderung wiederholen)./^hello
- finde eine Zeile, die mit hallo beginnt;c$goodbye
- Ändern Sie die Zeile auf Wiedersehen;n.
- Suche wiederholen, Änderung wiederholenWenn Sie die Zeile in eine bereits in der Datei vorhandene ändern möchten, können Sie sie einfach in Ihren Eingabepuffer kopieren (vorausgesetzt, Ihre GUI lässt dies zu) und dann einfügen, um den Inhalt des ersten Änderungsbefehls abzurufen.
Wie bei allen Dingen, ist es eine gute Idee, viele Optionen in der Tasche zu haben, abhängig davon, welche Art von Bearbeitung Sie ausführen möchten.
quelle