Як я можу скопіювати у 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

1
Ви також можете це зробити в звичайному режимі за допомогою "ayyjj"Ayy"ap.
wchargin

5
(або 1G"ayy3G"Ayy8G"apдля явних номерів рядків)
wchargin

1
Це не просто Gдля того, щоб піти на лінію, чи не так <C-G>?
Девід

1
Це так круто. Ви можете продовжувати додавати в буфер Aскільки завгодно речей, і це збереже все. Для початку покладіть щось на облікa
CornSmith

1
@CornSmith Nitpick: буфер - це дуже специфічний термін у контексті vim. "aє реєстром .
Doorknob

1

Ви можете використовувати :copyкоманду, яку можна скоротити як :t:

:1t8
:3t8

Якщо ви хочете скопіювати діапазон рядків (наприклад, всі рядки від 1 до 3), ви можете зробити це так:

:1,3t8

Я хочу скопіювати рядки за номером, але це не RANGE OF LINES ... Чи можу я з чимось на зразок команди 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

Вони можуть бути краще виражені :tкомандою, яка також не очищає "або 0реєструє.
Doorknob
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.