wie man Zeilen zu einem vim-Register hinzufügt, ohne es zu überschreiben


83

Ich würde gerne eine Zeile in ein Register ziehen: "{register}yaber ohne zu überschreiben, was vorher im Register war. Ich muss oft nicht zusammenhängende Zeilen in ein Register kopieren, und ich möchte manchmal die Register wie einen Stapel verwenden.

Beispiel:

line1
line2
line3

Ich möchte kopieren line1, indem ich den Cursor darauf setze und eintrete "ay, dann weitermache line3und mache "ay. Dann, wenn ich es tun werde "ap, werden BEIDE line1UND line3eingefügt.

Ist das ohne Plugins möglich? mit Plugins?


Hervorragend geeignet, um eine schnelle Liste der Definitionen oben in der Datei zu erstellen.
Joe McGrath

Antworten:



12

Wussten Sie, dass Sie Markierungen auch verwenden können, um einen Textblock für Ihren Ruck auszuwählen, um die Antwort von MarkB zu erweitern?

Gehen Sie zur ersten Zeile des Blocks, den Sie ziehen möchten, und geben Sie den Markierungsbefehl ein, nachdem Sie einen Buchstaben als Markierung ausgewählt haben, z

ma  (entered in command mode, i.e. no colon)

Gehen Sie dann zum Ende des Blocks, den Sie ziehen möchten, und geben Sie den folgenden Befehl ein:

:'a,.ya A

Dieser Befehl bedeutet, dass Sie den Textblock von der Zeile mit meinem Marker a bis zur aktuellen Zeile nehmen und in den Puffer a ziehen. Es gelten die gleichen Regeln wie bei MarkB. Verwenden Sie den Puffernamen in Kleinbuchstaben, um den Puffer zu überschreiben. Verwenden Sie den Puffernamen in Großbuchstaben, um ihn an den Puffer anzuhängen. In diesem Fall wird dies an den Inhalt von Puffer a angehängt.

NB Das für Ihren Marker verwendete 'a' hat nichts mit dem 'a' zu tun, das zur Auswahl Ihres Registers verwendet wird. (AFAIK aber YMMV)

Übrigens bezieht sich 'a (Apostroph a) auf die Linie, die den Marker a enthält. `a (backquote a) bezieht sich auf das Zeichen unter dem Cursor, als Sie ma eingegeben haben.

`ad`b (also entered in command mode)

Dies ist nützlich, da der Text zwischen dem mit Markierung a gekennzeichneten Zeichen bis zu dem Zeichen unmittelbar vor dem mit Markierung b gekennzeichneten Zeichen gelöscht wird .


'a, .ya A funktioniert, aber wenn ich es mit dem Häkchen vor a -> `a versuche, heißt es: E492: Kein Editorbefehl:` a, .ya A. Hätte geholfen, einfach keinen anderen Buchstaben zu verwenden als ein für den Marker im Beispiel, so ist klar, welcher Buchstabe welches Ding ist :)
Justin w
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.