Как я могу вытащить несколько строк в регистр?

44

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

Например, «iyy дергает только текущую строку, если я пытаюсь выбрать несколько строк в визуальном режиме, она не записывается в регистр.

Какие-либо предложения?

Ryz
источник
«если я пытаюсь выбрать несколько строк в визуальном режиме, это не записывается в регистр». <- Действительно? Работает для меня ...
Билли ONEAL
и для меня тоже ...
ulidtko
ну ладно, я пробовал с "ivv, глупый я. должен быть Vjjj", как упомянуто ulidtko.
ryz

Ответы:

59

Используйте, 3Yчтобы восстановить 3 строки в регистре по умолчанию; "i3Yдля восстановления в реестре я.

Кроме того, мой любимый способ - не подсчитывать строки, которые я хочу вытянуть, а выбирать их в визуальном режиме с помощью Vи перемещая команды, а затем yнажимать, чтобы восстановить или "_yвставить в регистр.

Кроме того, я только что попытался выбрать несколько строк в режиме Visual Line и нажать в регистр не по умолчанию, например Vjjj"oy- и это работает.

ulidtko
источник
1
+1 - но Vэто Visual Line Mode, vэто визуальный режим.
Билли ONEAL
хорошо, хорошо, верно. Режим визуальной линии. %)
ulidtko
1
с радостью принял это, самый быстрый способ для меня еще.
ryz
24

В любом месте файла вы можете использовать следующее.

:2,5y a

Янки строки 2 - 5. В РЕГИСТРАЦИЮ

:7pu a

Вставьте регистр под строку 7.

alock27
источник
1
Был задан вопрос: «Как я могу собрать несколько строк в регистр ?». Пожалуйста, покажите, как эти команды работают с регистрами.
Скотт
Я надеюсь, что мое редактирование выполнит ваш запрос.
alock27
Простите, нет. Вопрос явно упоминал «зарегистрироваться» неоднократно, ссылался на «легко вставлять различные текстовые шаблоны» и приводил пример использования регистра не по умолчанию.
Скотт
3
@ Скотт Мои извинения. Почему вы просто не сказали: «Чувак, проверь свой метод с помощью: reg. Ты увидишь, что он не работает». И я бы все сказал: «Ого, мой плохой».
alock27
1
Искал способ вернуть файл who в реестр + для копирования в системный буфер обмена. :% y + добились цели, спасибо.
AlexMA
10

Используйте, mчтобы отметить начало, с именем буфера (чтобы вы могли печатать mx). Переместите курсор вниз, где вы хотите остановить копирование, и введите y'x(или, d'xесли вы вырезаете и вставляете). Затем переместите к точке, где вы хотите вставить, и введите p.

Шпаргалка команды Vim

Nifle
источник
Вы уверены, что не имеете в виду vнет m?
Билли ONEAL
@BillyONeal «v» запускает визуальный режим и позволяет вам делать то же самое, «m» используется для «маркировки» региона.
Nifle
6

Вы ставите перед командой номер, чтобы узнать, сколько строк нужно обработать. Вы также можете использовать «текстовый объект» (например, «]» для блока и «)» для абзаца) - это будет работать с несколькими строками в контексте - по умолчанию часто используется одна строка. Например, "r5yyвытащил бы пять строк, начинающихся с курсора, в регистр 'r'. (Или вы можете напечатать, :.,+4y rчтобы сделать то же самое в режиме ex.) Вы также можете комбинировать числа с текстовыми объектами; "r10y),

Arcege
источник
1

Можно вырвать несколько строк в случае, когда это последний случай поиска.

Например, с учетом следующего многострочного не жадного шаблона :

/start\_.\{-}end/norm gn"iy

тогда вы будете иметь свой натянутый многострочный шаблон (между startи end) в своем @iрегистре (распечатывать echo @i).

Связанный: Как напечатать многострочное совпадение? в Vi

kenorb
источник