Vim yanking диапазон линий - PullRequest
       33

Vim yanking диапазон линий

72 голосов
/ 07 января 2010

Я разработчик на C #, который недавно решил расширить мои знания о доступных мне инструментах. Первый инструмент, который я решил изучить, - это Vi / Vim. Пока все идет хорошо, но есть пара вопросов, на которые я не могу найти ответ:

  1. Допустим, я хотел выдернуть ряд линий. Я знаю, что есть много способов сделать это, но я хотел бы сделать это по номеру строки. Я подумал, что это будет похоже на то, как работают команды замены, что-то вроде 81,91y. Есть ли способ сделать это?

  2. Я немного озадачен командой g в обычном режиме. Кажется, что это делает множество вещей, и я не могу точно определить, что делает команда g в своей основе. Я запутался в том, что это команда движения или что-то вроде «поймать все» для других команд, запускаемых в обычном режиме. Может кто-нибудь объяснить это или указать мне ссылку, которая дает хорошее объяснение команды g?

Ответы [ 7 ]

115 голосов
/ 07 января 2010

Линии Янки 81-91

:81,91y<enter>

Если ваши пальцы не любят находить клавиши : и ,, это также подойдет (переход к строке 81, возврат 11 строк)

81gg11yy 

Мое единственное использование g - 5gg. Чтобы перейти к 5-й линии. 22gg: 22-я строка. Как сказал Джимбо, это действительно только модификатор для некоторых других команд.

Для полноты (http://vim.wikia.com/wiki/Power_of_g) многое объясняет, как g работает в командном режиме.

17 голосов
/ 16 декабря 2014

Вы также можете скопировать текущие строки в текущую позицию курсора, используя 't'.

:81,91t.<enter>

Это вставит строки 81-91 под строкой, в которой находится курсор.

Я узнал об этом от http://vimcasts.org, который является отличным ресурсом для VIM.

9 голосов
/ 24 мая 2014

Мне также нравится использовать параметр относительного номера строки vim, который означает, что я могу просто ввести:

:-10,-7ya a

чтобы вернуть текст в именованный буфер a.

N.B. Указание A добавит то, что вы хотите, к текущему содержимому буфера a.

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

:-10,-7co .

означает копирование четырех строк текста на 10 строк выше до текущей строки, а

:-10,-7mo .

означает перемещение четырех строк текста на 10 строк выше и ниже текущей строки.

7 голосов
/ 04 февраля 2015

Команда G переходит к определенному номеру строки, если она сопровождается значением счетчика. 81G ставит вас на линию 81.

Команду y можно комбинировать с движением, например G. Таким образом, чтобы восстановить все до строки 91, вы можете использовать y91G.

Вместе вы получите:

81Gy91G

Перейти к строке 81, затем дернуть при переходе к линии 91.

4 голосов
/ 07 января 2010

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

z - еще одна подобная команда.

2 голосов
/ 07 июня 2018

Лучшим решением было бы войти в «визуальный режим», нажав v. А после выбора строк просто скопируйте их, нажав y. Затем вставьте скопированные строки, нажав p.

2 голосов
/ 07 января 2010

Vim's :help index описывает g как:

|g|             g{char}            extended commands, see |g| below

Прокрутите вниз (или :help g) для списка.

...