vim: Kann ich * nur * eine Kopie erstellen?


11

Ich lerne, vim zu mögen, aber eine Sache, die ich noch nicht vollständig angenommen habe, ist das Kopieren und Einfügen. In einem Muggel-Texteditor würde ich Ctrl- Cein Stück Text kopieren und dann bearbeiten / löschen und dann den Text an einer anderen Stelle einfügen. In vim kann ich dies jedoch nicht tun, da das yÄndern des Textes nach dem Kopieren von Text häufig dazu führt dund xmeinen ursprünglichen Text auslöscht.

Gibt es eine Möglichkeit, den Text zu erstellen dund xnicht zu kopieren? Oder wie soll ich diese vim-Funktionen verwenden?

Antworten:


16

Die 9 vorherigen yanks werden in Registern gespeichert genannt 1durch 9. Sie können sich an den vorletzten Ruck mit "1p, den vorherigen mit "2pund so weiter erinnern . Der Befehl :regzeigt die Register an, die zum Einfügen verfügbar sind.

Wenn Sie möchten, dass ein Ruck länger hält, verwenden Sie ein Buchstabenregister .

Lesen Sie :help "das Handbuch unter, um die dunkeleren Befehle im Zusammenhang mit dem Ruck zu lesen .


2
Außerdem enthält Register 0 den zuletzt gerissenen Text (im Gegensatz zum gelöschten). So Bezug zurück auf die ursprüngliche Frage, können Sie reißen mit y, weiter bearbeiten einschließlich dund x, und fügen Sie den Text in zerrte mit"0p
Nefrubyr

@Nefrubyr, dein Kommentar oben ist eigentlich die einfachste Antwort, wird aber in keiner der drei vorhandenen Antworten erwähnt. Vielleicht solltest du es hinzufügen? (Ich kann, wenn Sie nicht.)
Wildcard

9

Die Befehle, über die Sie sprechen, verwenden das sogenannte "unbenannte" Register. Es ist nur für den sehr kurzfristigen Gebrauch gedacht. "Ich werde das von hier ziehen und es dort hinstellen".

Wenn Sie etwas länger als ein paar Sekunden festhalten möchten, während Sie etwas anderes tun, sollten Sie benannte Register verwenden.

Zum Beispiel " a y ywird die Zeile, auf der sich der Cursor befindet, in das aRegister gezogen. Nichts wird es versehentlich blockieren, es sei denn, Sie geben einen anderen Befehl ein, der das aRegister betrifft . Minuten, Stunden, sogar Tage später können Sie " a peingeben, um die abgerissene Kopie der Zeile aus dem zu löschena Register unter dem zu löschen, auf dem sich der Cursor befindet.

(Damit dies wirklich gut funktioniert, sollten Sie eine Zeile wie set viminfo='50,\"1000in Ihrer ~/.vimrcDatei haben, um sie an Dinge wie das Registrieren von Inhalten in Vim-Sitzungen zu erinnern. Sie können dann zwischen Yank und Put in den Urlaub fahren!)

Es gibt 26 benannte Register (az). Wenn Sie sie als Großbuchstaben anstatt wie oben gezeigt eingeben, hängen Sie sie an den aktuellen Registerinhalt an, anstatt sie zu ersetzen. Sie können also etwas wirklich Komplexes aufbauen h, indem Sie beispielsweise ein Stück nach dem anderen registrieren und dann alles auf einmal mit plumpsen " h p.

Beachten Sie, dass der Registername optional ist. Dies impliziert, dass es möglicherweise viele Befehle gibt, die Sie bereits kennen und verwenden, wo Sie benannte Register verwenden könnten. Sagen Sie :help registersin Vim, um sich ein Bild von den Möglichkeiten zu machen.

Holen Sie sich auch einen Vi-Becher .


1

Wenn Sie Text mit d löschen müssen, ohne Ihr Ruckregister zu ändern (z. B. haben Sie bereits Text darin gerissen, den Sie nicht einfügen können, bevor Sie beispielsweise einen anderen Text löschen), können Sie das Schwarzlochregister verwenden _ .

Wenn Sie dies "_ddbeispielsweise tun , wird die aktuelle Zeile sofort gelöscht und vergessen.

Eigentlich benutze ich dieses Register nicht sehr oft. Es sind nicht weniger Tastenanschläge erforderlich als das Speichern in einem Allzweckregister (ein beliebiges Buchstabenregister). Wenn Sie in einem Allzweckregister speichern, sind zumindest die von Ihnen gelöschten Zeilen verfügbar, bis Sie das Register überschreiben das Bedürfnis entsteht.

Wenn Sie beim Löschen häufig vergessen, ein anderes Register zu verwenden, können Sie beispielsweise ein Wrapper-Makro ddwie folgt definieren : :noremap dd "add.


0

Wie in den Kommentaren zur (aktuell) akzeptierten Antwort ausgeführt, besteht der kanonische Weg dazu darin, das Register Null ( "0) zu verwenden. Register Null enthält immer den letzten Ruck und wird nicht von dund überschrieben. Setzen Sie xalso "0pimmer das, was Sie gerissen haben, unabhängig davon, was in der Zwischenzeit bearbeitet wurde.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.