No Vim, como posso copiar de várias linhas? (não um intervalo);

20

Suponha que eu tenho

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

como posso copiar as linhas 1 e 3 (não um intervalo de linhas) e colá-las, por exemplo, na linha 8? Se eu fizer isso com |arg como ( 1y|3y), eu puxaria linhas para vários registros, certo? Mas como posso colocar em vários registros de uma só vez?

Qual é o meu nome
fonte

Respostas:

33

Você pode anexar a um registro em vez de apagá-lo usando a letra maiúscula em vez da minúscula.

Por exemplo:

: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
fonte
11
Você também pode fazer isso no modo normal com "ayyjj"Ayy"ap.
precisa saber é
5
(ou 1G"ayy3G"Ayy8G"appara números de linha explícitos)
wchargin 28/04
11
Não é apenas Gpara ir para a fila, não é <C-G>?
David
11
Isso é tão legal. Você pode continuar adicionando quantas coisas Aquiser para armazenar em buffer e isso manterá tudo. Para começar de novo, colocar algo no registoa
CornSmith
11
@CornSmith Nitpick: buffer é um termo muito específico no contexto do vim. "aé um registro .
Doorknob 29/04
1

Você pode usar o :copycomando, que pode ser abreviado como :t:

:1t8
:3t8

Se você deseja copiar um intervalo de linhas (por exemplo, todas as linhas de 1 a 3), é possível fazer o seguinte:

:1,3t8
Roberto Bonvallet
fonte
Quero copiar linhas por número, mas não uma GAMA DE LINHAS ... Posso acrescentar algo como o comando t à linha?
O que é 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
fonte
Estes podem ser melhor expressa com o :tcomando, que também não limpar o "ou 0registros.
Doorknob 29/04