Dans Vim, comment copier depuis plusieurs lignes? (pas une plage);

20

Je suppose que j'ai

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

comment puis-je copier les lignes 1 et 3 (pas une plage de lignes) et les coller, par exemple à la ligne 8? Si je fais cela avec |arg comme ( 1y|3y), je tirerais des lignes vers plusieurs registres, non? Mais comment puis-je mettre à partir de plusieurs registres à la fois?

Quel est mon nom
la source

Réponses:

33

Vous pouvez ajouter à un registre au lieu de l'effacer en utilisant la lettre majuscule au lieu de la lettre minuscule.

Par exemple:

: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
la source
1
Vous pouvez également le faire en mode normal avec "ayyjj"Ayy"ap.
wchargin
5
(ou 1G"ayy3G"Ayy8G"appour les numéros de ligne explicites)
wchargin
1
N'est-ce pas juste Gpour aller à la ligne, non <C-G>?
David
1
C'est trop cool. Vous pouvez continuer à ajouter autant de choses à mettre en mémoire tampon Aque vous le souhaitez et tout sera conservé. Pour recommencer, mettez quelque chose dans le registrea
CornSmith
1
@CornSmith Nitpick: buffer est un terme très spécifique dans le contexte de vim. "aest un registre .
Poignée de porte
1

Vous pouvez utiliser la :copycommande, qui peut être abrégée comme suit :t:

:1t8
:3t8

Si vous souhaitez copier une plage de lignes (par exemple toutes les lignes de 1 à 3), vous pouvez le faire comme ceci:

:1,3t8
Roberto Bonvallet
la source
Je veux copier les lignes par numéro, mais pas une GAMME DE LIGNES ... Puis-je ajouter quelque chose comme la commande t à la ligne?
Quel est Myname le
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
la source
Ceux-ci peuvent être mieux exprimés avec la :tcommande, qui n'efface pas non plus les registres "or 0.
Poignée de porte