Jak w Vimie mogę skopiować z kilku linii? (nie zakres);

20

Załóżmy, że mam

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

jak mogę skopiować linie 1 i 3 (nie zakres linii) i wkleić je, na przykład w linii 8? Jeśli zrobię to w podobny sposób z |arg like ( 1y|3y), szarpnęłbym linie do kilku rejestrów, prawda? Ale jak mogę umieścić kilka rejestrów jednocześnie?

Jak mam na imię
źródło

Odpowiedzi:

33

Możesz dołączyć do rejestru zamiast kasować go, używając dużej litery zamiast małej.

Na przykład:

: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
źródło
1
Możesz to również zrobić w trybie normalnym za pomocą "ayyjj"Ayy"ap.
wchargin 28.04.16
5
(lub w 1G"ayy3G"Ayy8G"apprzypadku wyraźnych numerów linii)
wchargin 28.04.16
1
Czy nie chodzi tylko Go przejście do linii <C-G>?
David
1
To jest takie fajne. Możesz dodawać do bufora dowolną liczbę rzeczy A, a to wszystko. Aby zacząć od nowa, zarejestruj cośa
CornSmith 28.04.16
1
@CornSmith Nitpick: bufor jest bardzo specyficznym terminem w kontekście vima. "ajest rejestrem .
Klamka
1

Możesz użyć :copypolecenia, które może być skrócone jako :t:

:1t8
:3t8

Jeśli chcesz skopiować zakres linii (np. Wszystkie linie od 1 do 3), możesz to zrobić w następujący sposób:

:1,3t8
Roberto Bonvallet
źródło
Chcę skopiować wiersze według numeru, ale nie ZAKRES LINII ... Czy mogę użyć polecenia t dołączającego się do wiersza?
What Myname 28.04.16
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
źródło
Można to lepiej wyrazić za pomocą :tpolecenia, które również nie kasuje rejestru "lub 0.
Klamka