Wie lassen sich mehrere Zeilen am besten durch den Inhalt der Zwischenablage ersetzen?
Das Problem, das ich habe, ist, wenn ich eine Linie ziehe und sie über eine andere Linie füge, wird der "Ruck" durch die Linie ersetzt, die ich gerade ersetze. Wenn ich nun eine andere Zeile durch dieselbe ersetzen möchte, muss ich wieder nach oben gehen und sie erneut ziehen.
Es muss einen besseren Weg geben, dies zu tun.
vnoremap
). Die Vim-Hilfedateistatusversion7.txt
xmap und smap wurden in dieser Version angezeigt.xnoremap
nochvnoremap
funktioniert"0
sollte den Inhalt Ihres Ruckes haben. Das Tippen ist etwas mühsamer,"0p
sollte aber tun, was Sie wollen.Alternativ können Sie die alten Leitungen nicht vorne auswählen und ersetzen. Wenn Sie diese Zeilen mit einer Suche finden, drücken
n.
Sie einfach immer wieder (nach einer Initialep
). Wenn sie alle eingefügt sind,ndd
folgen Sie so vielenn.
s wie nötig.Der größte mentale Wechsel, den ich bei einem Wechsel zu Vim vornehmen musste, besteht darin, herauszufinden, wie Gruppenänderungen nacheinander angewendet werden. Das heißt, anstatt eine Reihe von Änderungen in einer Zeile und dann eine Reihe derselben Änderungen in einer anderen Zeile vorzunehmen, werde ich die erste Bearbeitung in einer Reihe von Zeilen vornehmen (mit
.
großem Effekt), dann die zweite Bearbeitung in einer Reihe von Zeilen usw. Alternativ kann die Verwendung von Makros hilfreich sein, da sie fantastisch sind, aber manchmal etwas mühsamer, um mit "komplexen" Änderungen richtig zu arbeiten.quelle
:%s/.../.../gc
Befehlen zum Bestätigen des Typs möglicherweise näher an5@m
m
xnoremap p "0p
in meinem ~ / .vimrcIch verwende oft eine andere Registrierung, kopiere die benötigte Zeile in eine benannte Registrierung
"ay
und füge sie von dort aus ein"ap
quelle
Wenn Sie eine Auswahl in Vim einfügen, wird das Standardregister durch den Inhalt der Auswahl ersetzt. Wenn das Einfügen über eine Auswahl den Inhalt des Zwischenablage-Registers löscht, haben Sie höchstwahrscheinlich die folgende Zeile in Ihrer .vimrc
Eine Möglichkeit besteht darin, dies zu entfernen und das explizite Zwischenablage-Register zu verwenden
"+
Eine andere Möglichkeit besteht darin, eines der anderen explizit benannten Register (az) zu verwenden. Nach dem ersten Einfügen ziehen Sie die Linie
"c
zum Beispiel zurück und verwenden Sie dann,"cp
um von dort aus nach außen einzufügen .quelle
Verwenden Sie
np
won
ist die Anzahl der Zeit, die Sie die Zeilen3p
einfügen möchten, z. B. werden 3 Zeilen eingefügt.quelle
Anstatt Kopieren / Einfügen zu verwenden, ist es oft besser, einen Textobjektbefehl zu verwenden
ciw
, um beispielsweise das innere Wort zu ändern. Diese Methode hat den Vorteil, dass sie mit dem.
Befehl repeat leicht wiederholt werden kann .yiw
Innenwort ziehen (Wort unter Cursor kopieren, "zuerst" sagen).ciw<C-r>0
Ändern Sie "second" und ersetzen Sie es durch "first" (ist Strg-R)..
Ändern Sie "drittes" und ersetzen Sie es durch "erstes".quelle
ciw<C-r>0
funktioniert in meinem Fall nicht.ciw
wechselt in den Einfügemodus, in dem er<C-r>
unbrauchbar wird. Gibt es eine einfache Erklärung dafür? Könnte das mit dem Texteditor zu tun haben (ich verwende kein reines VIM, sondern VIM-Tastaturbindungen in RStudio)<C-r>
soll im Einfügemodus verwendet werden, da Sie so aus einem Register einfügen, ohne den Einfügemodus zu verlassen - also in Vim; Ich bin mit RStudio nicht vertraut, aber ich würde vermuten, dass Sie Recht haben und diese spezielle Schlüsselbindung nicht implementiert wurde.