Ich habe Text in meinem yw
Einfügepuffer , z. B. habe ich ein (Ruckwort) und jetzt habe ich 'foo' in meinem Puffer.
Ich gehe jetzt zum Wort "Leiste" und möchte es durch meinen Pastenpuffer ersetzen.
Um den Text manuell zu ersetzen, kann ich cw
das neue Wort eingeben.
Wie kann ich ein 'Änderungswort' erstellen, aber den Inhalt meines Einfügepuffers verwenden, anstatt das Ersatzwort manuell einzugeben?
Die beste Option, die ich derzeit habe, ist, an den Anfang des Wortes zu springen, das ich ersetzen und tun möchte dw
(Wort löschen), dann an die andere Stelle zu gehen und das yw
(Ruckwort) zu tun , und dann zum Ersetzungsbereich zurückzukehren und zu tun p
(Einfügen), was etwas umständlich ist, besonders wenn sie sich nicht auf demselben Bildschirm befinden.
vep
.ve"0p
würde arbeiten, um Sie Ihre Änderung wiederholen zu lassenmap <C-j> ciw<C-r>0<ESC>
Es spielt also keine Rolle, woher das Wort kommt, das Sie drücken^j
.:help insert
ist, sucht nach STRG-R/CTRL-R
.ve"0p
Schauen Sie sich an, wie es funktioniert:help registers
yw
Bewegen Sie den Cursor zu dem Wort, das Sie ersetzen möchten, und"_dw
löschen Sie es mit, indem Sie den Text an das"
Nullregister senden (damit der Inhalt des Registers nicht überschrieben wird, in dem Text mit Ruckeln / Ausschneiden standardmäßig verwendet wird) ) und dann einfach mit einfügenp
.Sie könnten die folgende Zuordnung verwenden, um die Dinge ein wenig einfacher zu machen:
... so können Sie im normalen Modus
\dw
ein Wort löschen, ohne das"
Register zu beeinflussen.quelle
Um dies auf die VIM-Weise zu tun, verwenden Sie absichtlich die Register yank, delete und andere.
Register
"0
ist das Ameisenregister. Alles, was Sie reißen, wird hier abgelegt, aber das Löschen berührt niemals das Register"0
.In Ihrem Beispiel hatten Sie also gerade ein Wort gezerrt. Um ein Wort durch das zu ersetzen, was Sie gerade gezerrt haben, nutzen Sie Löschvorgänge, die das Zerrregister niemals berühren. So bewegen sich auf dem Zielwort, löschen Sie ihn mit
dw
, dann fügen Sie von Ihrem yank-Register mit"0p
, oder besser noch,cw
dann^R0
(was wiederholbar ist).Ein enges Gegenteil zum Yank-Register ist das kleine Deletions-Register
"-
. Alle kleinen Lösch- oder Änderungsentfernungen werden hier abgelegt, aber die Amis berühren sich nie"-
. Eine Löschung gilt als klein, wenn sie weniger als eine vollständige Zeile enthält.Register
"1
-"9
sind die Löschhistorienregister. Mit dem"1
Enthalten der neuesten großen Löschung oder Änderungsentfernung und dem"9
Enthalten der ältesten großen Löschung oder Änderungsentfernung. Nur nicht kleine Löschungen, dh Löschungen einer oder mehrerer Zeilen, werden auf"1
- verschoben"9
.Bei jeder Operation, die ein Register ändert, wird eine Kopie auch immer im Standardregister (auch als unbenanntes Register bezeichnet) abgelegt
""
. Dies ist das Register, das verwendet wird, wenn Sie ein Register nicht explizit benennen.Register
"_
ist das Register der Schwarzen Löcher und es ist immer leer. Wenn Sie es löschen, wird nichts in einem Register geändert, nicht einmal das Standardregister""
oder das Black-Hole-Register. Der entfernte Text ist abgesehen von Ihrem Rückgängig-Verlauf vollständig verschwunden. Das Ziehen an oder Einfügen aus dem Schwarzlochregister bewirkt im Wesentlichen nichts.Mit dem Black-Hole-Register
"_
können Sie beispielsweise zuerst eine kleine Löschung, dann eine Reihe anderer Löschungen vornehmen,"_
ohne das kleine Löschungsregister zu ändern"-
, und dann Ihre erste kleine Löschung einfügen.Andere Register sind das zuletzt eingefügte Register
".
, die Dateinamenregister"%
und"#
das Befehlsregister":
, das Suchregister"/
und Ausdrucksregister"=
.Mit dem Befehl können Sie eine Liste aller dieser Register und ihrer Inhalte abrufen
:register
. Dieser Befehl ist sehr nützlich, um zu experimentieren und zu lernen, was wo landet.quelle
Ich brauche das so oft, dass ich ein Plugin geschrieben habe, um die maximale Geschwindigkeit zu vereinfachen und zuzulassen: ReplaceWithRegister .
Dieses Plugin bietet einen Zwei-in-Eins-
gr
Befehl, der Text, der von einem {motion} / text-Objekt, einer ganzen Zeile oder der aktuellen Auswahl abgedeckt wird, durch den Inhalt eines Registers ersetzt. Der alte Text wird im Black-Hole-Register gelöscht, dh er ist weg. Es behandelt transparent viele Eckfälle und ermöglicht eine schnelle Wiederholung über den Standardbefehl.
. Sollte es Ihnen nicht gefallen, finden Sie auf der Seite Links zu Alternativen.quelle
Verwenden Sie den Befehl change, um das Einfügen zu wiederholen.
cw ^R0ESC (^ R = Strg + R; 0 für Register 0)
ersetzt das Wort durch den Inhalt aus reg. 0 und lassen Sie es uns mit wiederholen.
Dies ist ideal für cgn(VIM 7.4), um Suchmuster zu ersetzen:
quelle
Da es noch nicht enthalten ist, ersetzen Sie normalerweise Zeichenfolgen durch
:%s/.../.../
und Sie können dies auch mit dem Wort unter Ihrem Cursor tun.:s/find/
<ctrl-r>
und wählen mit dem Cursor das Wort aus, durch das Sie es ersetzen möchten.<ctrl-w>
(kleines "Wort") oder<ctrl-a>
(großes "Wort), um das Wort unter dem Cursor in die Befehlszeile einzufügenSiehe den Link zum Verwenden von Cursor-Elementen in der Befehlszeile .
quelle
Normalerweise verwende ich diese: ywheftig zu ziehen
foo
, dann löschen Siebar
mit dw, und als letzten Schritt legenfoo
aus dem Register ,0
das Text mit gezerrt hält "0p. Wiederholen Sie das Einfügen mit Punkt ( .) nach Bedarf.Anstelle von ywund dwkönnen Sie auch yiwund verwenden diw(beachten Sie das Extra i- es bedeutet innen ). Damit können Sie ein Wort an einer beliebigen Stelle innerhalb des Wortes ziehen oder löschen , nicht nur am Wortanfang.
quelle
Ich benutze dieses Plugin zum Erweitern der Auswahlregion: https://github.com/terryma/vim-expand-region
Meine Kombination zum Ändern eines Wortes ist also:
vvp
an jeder Stelle eines Wortes.Ich habe auch einen Hack zum Speichern unbenannter Registerinhalte nach dem Einfügen, damit ich dies wiederholen kann.
(meine Zwischenablage ist automatisch ausgewählt)
quelle
Ich verwende die folgende Tastenbelegung, um das aktuelle Wort durch ein kopiertes Wort zu ersetzen.
" replace with Register 0
map <leader>rr ciw<C-r>0<Esc>
yiwKopieren Sie ein Wort. Navigiere zu einem Wort. ,rrErsetzen Sie das Wort.
Anführerschlüssel ist Karte zu ,.
quelle
,rw
würde mehr Sinn machen, und auf QWERTY ist ein smidgen wohl einfacher und schneller auszurüsten. Bei DVORAK habe ich gewählt,rc
, was zwar überhaupt keinen Sinn ergibt, aber einfacher und schneller ist als alle anderen. Auf DVORAK,rw
ist eine Horrorshow;)Navigieren Sie zunächst zum Anfang des Wortes, das Sie ruckeln möchten. Wenn Sie in der Mitte des Wortes sind, gehen Sie einfach
b
zum Anfang zurück. Dann tun Sieye
, um das ganze Wort ohne Leerzeichen zu reißen (y
ank bise
nd). Gehen Sie zum Schluss zu dem Wort, das Sie ersetzen möchten - vielleicht durch mehrmaliges Ausführenw
- und gehen Sie zu a , um in den Modusvep
für diev
tatsächliche Auswahl zu gelangen , wählen Sie den Endpunkte
des Wortes aus undp
überprüfen Sie den zuletzt gezogenen Inhalt.(Wenn jemand wissen will , warum ich nicht einfach auf der akzeptierten Antwort kommentieren, für die kleine Änderung der Verwendung
ye
nichtyw
, dann ist es , weil mein Ruf auf diesem Stapel noch zu niedrig ist.)quelle
yw
Sie, um die Welt zu reißen, gehen Sie zu der Welt, die Sie ändern möchten.v
, um die Welt auszuwählen,ve
odervw
je nach Ihrer Situation.p
zu Paster der Welt , die Sie kopiert den ausgewählten Block zu ersetzenquelle
Hinzufügen zu den anderen besseren Antworten. Ein bisschen zu offensichtlich, aber Sie können es einfach einfügen, bevor Sie es löschen. "yw" und dann das Wort, das Sie ersetzen möchten, "pldw" (Einfügen, ein Zeichen nach rechts bewegen, Wort löschen).
quelle