Как добавить строки в регистр vim без перезаписи

Я хотел бы выровнять строку в регистре: "{register}y, но без перезаписи того, что было ранее в регистре. Мне часто приходится копировать несмежные строки в регистр, и я бы хотел иногда использовать регистры, например, стек.

Пример:

line1
line2
line3

Я хочу скопировать line1, поместив курсор на него и введя "ay, затем перейдем к line3 и сделаем "ay. Затем, когда я сделаю "ap, BOTH line1 AND line3 будет вставлен.

Возможно ли это без плагинов? с плагинами?

Ответ 1

Если вы хотите добавить к именованному регистру, используйте соответствующий символ верхнего регистра. т.е. в вашем примере:

"ayy
"Ayy
"ap

Ответ 2

Просто чтобы расширить ответ MarkB, знаете ли вы, что вы также можете использовать маркеры для выбора блока текста для вашего yank?

Перейдите в первую строку блока, который хотите вынуть, и введите команду метки после выбора буквы в качестве маркера, например

ma  (entered in command mode, i.e. no colon)

затем перейдите в нижнюю часть блока, который вы хотите выдернуть, и введите команду:

:'a,.ya A

эта команда означает, что блок текста из строки, содержащей мой маркер, называется до текущей строки и вытаскивает его в буфер a. Те же правила, что и MarkB, применимы, используйте имя нижнего регистра для перезаписывания буфера. Используйте имя буфера верхнего регистра для добавления в буфер. Поэтому в этом случае это будет добавлено к содержимому буфера a.

N.B. "A", используемый для вашего маркера, не имеет ничего общего с "a", используемым для выбора вашего регистра. (AFAIK, но YMMV)

BTW 'a (апостроф a) относится к строке, содержащей маркер a. `a (backquote a) относится к символу под курсором при вводе ma.

`ad`b (also entered in command mode)

полезен, потому что он удалит текст между символом, помеченным маркером а, до символа непосредственно перед символом, отмеченным маркером b.