как добавить строки в регистр VIM, не перезаписывая его - PullRequest
76 голосов
/ 19 декабря 2008

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

Пример:

line1
line2
line3

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

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

Ответы [ 2 ]

119 голосов
/ 19 декабря 2008

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

"ayy
"Ayy
"ap
11 голосов
/ 19 декабря 2008

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

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

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

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

:'a,.ya A

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

N.B. «А», используемая для вашего маркера, не имеет ничего общего с «а», используемым для выбора вашего регистра. (AFAIK но YMMV) * ​​1011 *

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

`ad`b (also entered in command mode)

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

...