In Konfigurationsdateien kopiere ich häufig einen Zeilenblock und füge ihn ein. Dann möchte ich kleine Änderungen an diesem Block vornehmen. Nach dem Einfügen x
lösche ich mit Zeichen, die ich entfernen möchte, und füge dann den nächsten Block ein. Mit Ausnahme x
der gelöschten Zeichen in der Zwischenablage, so muss ich den Zeilenblock erneut kopieren.
Gibt es eine Möglichkeit, dies zu tun, ohne in den Einfügemodus zu wechseln?
cut-copy-paste
register
durron597
quelle
quelle
Antworten:
Ihre Möglichkeiten sind:
_
. Zum Beispiel, um eine Zeile zu löschen, die Sie eingeben würden"_dd
. Dies wird ohne Auswirkung auf die Zwischenablage gelöscht."ayy
, geben Sie Folgendes ein und fügen Sie sie ein"ap
"0p
Führen Sie
:help registers
die ersten drei Schritte aus, um weitere Informationen zu erhaltenquelle
x
würde ich"_x
dann verwenden?x
, sollten Sie wahrscheinlich lernen, wie man durch Bewegung löscht,dt)
welche löscht, bis die nächste enge Klammerd2W
die nächsten zwei durch Leerzeichen getrennten Token löscht. Dann machst du vielleicht etwas"_di{
in einer geschweiften Region, was ich die ganze Zeit mache. Im normalen Modus bedeutet dies: " Lösche alles in dieser verstrebten Region in das Schwarze Loch "nnoremap x "_x
meine~/.vimrc
(Erklärung hier: stackoverflow.com/questions/54255/... ).x
legt Dinge nicht in der Zwischenablage ab, sondern legt sie in einem Register ab . Wenn Sie ihm nicht mitteilen, in welches Register er gestellt werden soll, wird er in das unbenannte Register gestellt, wodurch natürlich der vorherige Inhalt überschrieben wird. Sagen Sie ihm stattdessen, welches Register verwendet werden" REGISTER x
soll:, wobei REGISTER ein einzelner Buchstabe ist. Sie verwenden dann dasselbe Anführungszeichen-Präfix, pum aus diesem Register einzufügen. (Hinweis: Kleinbuchstaben ersetzen den Inhalt; Großbuchstaben werden angehängt).Es gibt auch zwei Sonderregister
"0
und"1
."0
ist der zuletzt gezerrte ( y) Text, der auch dann erhalten bleibt, wenn Sie Text mit einem anderen Befehl (wie x) löschen ."1
ist der zuletzt gelöschte Text, solange dieser Text nicht klein ist (eine Zeile). Kleiner gelöschter Text geht ein"-
.Schließlich können Sie, wie Steve Vermeulen betont, vim anweisen, gelöschten Text nicht zu speichern, indem Sie das Register für Schwarze Löcher angeben
"_
.Der entsprechende Hilfebefehl lautet
:help registers
.quelle
Mit dem
:let
Befehl können Sie ein benanntes Register neu definieren. Drücken Sie in der Befehlszeile von vim zweimalControl + 1 und dann den Registernamen, um den Inhalt des Registers in den Befehl einzufügen. Anschließend können Sie die eingefügten Elemente ändern und das Register mit Ihren Änderungen speichern.RBeispiel:
"fyy
die gesamte Zeile (yy
) in dasf
Register ("f
) eingegeben .:let @f='
und Control+ r, Control+ rwieder, dann f, und Sie sollten sehen , daß es in „Foo Bar“ einfügen, so dass Ihre Kommandozeile jetzt liest:let @f='Foo Bar
, mit dem Cursor am Ende.:let @f='foo bar baz
.:let @f='foo bar baz'
und drücken Sie Enter.Jetzt haben Sie den Inhalt des
f
Registers als "foo bar baz" neu definiert.(Dies funktioniert auch für Makros!
:help let
Weitere Informationen.)Mit 1 Control + rkönnen Sie ein Register einfügen, wenn Sie sich bereits im Einfügemodus befinden, als würden Sie die Zeichen eingeben. Es ist wichtig, diese Sequenz zweimal zu verwenden, da "der Text wörtlich und nicht wie geschrieben eingefügt wird. Dies unterscheidet sich, wenn das Register Zeichen wie
<BS>
" enthält . - die insert.txt vimdoc,:help i_CTRL-R_CTRL-R
quelle
Bezogen auf das
"_
von @derobert erwähnte Blackhole-Register finden Sie einen nützlichen Screencast unter http://vimcasts.org/episodes/meet-the-yank-register/quelle
Plugin ReplaceWithRegister
http://www.vim.org/scripts/script.php?script_id=2703 (2009-2014)
Es schlägt die Zuordnung vor
gr
.gr
Alternativ können
gr<text object>
Sie dies auch ohne visuelle Auswahl tun. dot-repeat wird unterstützt, wenn die Pluginsrepeat.vim
von Tim Pope undvisualrepeat.vim
Ingo Karkat installiert sind.quelle