В Vim как можно копировать из нескольких строк? (не диапазон);

20

Предположим, у меня есть

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

как я могу скопировать строки 1 и 3 (не диапазон строк) и вставить их, например, в строку 8? Если я сделаю это с помощью |arg like ( 1y|3y), я перетяну строки в несколько регистров, верно? Но как я могу поставить из нескольких регистров одновременно?

Как меня зовут
источник

Ответы:

33

Вы можете добавить в регистр вместо стирания его, используя заглавные буквы вместо строчных.

Например:

: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
источник
1
Вы также можете сделать это в обычном режиме с помощью "ayyjj"Ayy"ap.
wchargin
5
(или 1G"ayy3G"Ayy8G"apдля явных номеров строк)
wchargin
1
Разве это не только Gдля того, чтобы идти в линию, не <C-G>?
Дэвид
1
Это так круто. Вы можете продолжать добавлять в буфер столько вещей, Aсколько захотите, и все это сохранится. Чтобы начать все сначала, a
внесите
1
@CornSmith Nitpick: буфер - это очень специфический термин в контексте vim. "aэто регистр .
Дверная ручка
1

Вы можете использовать :copyкоманду, которая может быть сокращена как :t:

:1t8
:3t8

Если вы хотите скопировать диапазон строк (например, все строки от 1 до 3), вы можете сделать это следующим образом:

:1,3t8
Роберто Бонваллет
источник
Я хочу, чтобы скопировать строки по номеру, но не ряд строк ... Могу ли я с чем-то вроде команды t добавить в строку?
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
источник
Это может быть лучше выражено с помощью :tкоманды, которая также не очищает регистры "или 0.
Дверная ручка