Wie kann ich in Vim aus mehreren Zeilen kopieren? (kein Bereich);

20

Angenommen, ich habe

1 - funct1
2- funct 2
3 - funct 3 
4 line 4

Wie kann ich Zeile 1 und 3 (nicht einen Bereich von Zeilen) kopieren und einfügen, zum Beispiel in Zeile 8? Wenn ich das mit |arg like ( 1y|3y) so mache, würde ich Zeilen in mehrere Register reißen, oder? Aber wie kann ich aus mehreren Registern gleichzeitig setzen?

Was ist mein Name
quelle

Antworten:

33

Sie können an ein Register anhängen, anstatt es zu löschen, indem Sie den Großbuchstaben anstelle des Kleinbuchstaben verwenden.

Beispielsweise:

:1y a      # copy line 1 into register a (erases it beforehand)
:3y A      # copy line 3 into register a (after its current content)
8G  # go to line 8
"ap        # print register a
lgeorget
quelle
1
Sie können dies auch im normalen Modus mit tun "ayyjj"Ayy"ap.
Wchargin
5
(oder 1G"ayy3G"Ayy8G"apfür explizite Zeilennummern)
wchargin
1
Ist es nicht nur Gzum Anstellen, nicht <C-G>?
David
1
Das ist so cool. Sie können so viele Dinge zum Puffern hinzufügen, Awie Sie möchten, und alles bleibt erhalten. Um noch einmal von a
vorne
1
@CornSmith Nitpick: buffer ist ein sehr spezifischer Begriff im Kontext von vim. "aist ein Register .
Türklinke
1

Sie können den :copyBefehl verwenden, der wie folgt abgekürzt werden kann :t:

:1t8
:3t8

Wenn Sie einen Bereich von Zeilen kopieren möchten (z. B. alle Zeilen von 1 bis 3), können Sie dies folgendermaßen tun:

:1,3t8
Roberto Bonvallet
quelle
Ich möchte Zeilen nach Nummer kopieren, aber keine LINIENREIHE ... Kann ich mit etwas wie dem Befehl t eine Zeile anhängen?
Whats Myname
0
1Gyy7Gp #use 7 if you wish to paste the line at 8
3Gyy8Gp #use 8 if you wish to paste the line at 9
sjsam
quelle
Diese können besser mit dem :tBefehl ausgedrückt werden , der auch die "oder 0-Register nicht löscht .
Türklinke