2010-01-07 4 views
59

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

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

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

+1

Знаете ли вы о команде ": помощь" в Vim (1)? –

+0

Да, но я не смог найти его во всех ссылках. Оказывается, я думал, что сделаю это из нормального режима, но hometoast показал, как это должно было быть сделано из командного режима. Для команды g я просто обнаружил, что помощь не связывает все вместе, как я ожидал бы от других команд. – jnadro52

+3

Как в стороне, я могу сделать одно сообщение на вопрос. – Dana

ответ

96

дергать линии 81-91

:81,91y<enter> 

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

81gg11yy 

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

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

+0

Ничего себе, это было быстро! Я не пробовал делать это из командного режима, ду! Большое спасибо за быстрый ответ. – jnadro52

+2

Использование заглавных букв также дает варианты: 'gg' перейдет в первую строку, а' G' перейдет к последнему. Кроме того, '5G' переходит к строке 5. Знаки также могут использоваться вместо номеров строк (полезно для макросов), то есть:': 'a, 52y' – NVRAM

+5

вы также можете сделать: 5 в командном режиме, чтобы перейти к строке 5 , и т. д. – rmeador

4

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

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

+0

Спасибо. Теперь я понимаю, что он просто используется для разных целей. Когда я пытаюсь изучить эти инструменты, я пытаюсь связать команды с чем-то, что я могу абстрагировать, чтобы я помню, как правильно его использовать. Похоже, команда g - это только одна из тех вещей, которые вам нужно запомнить для правильного использования. – jnadro52

2

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

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

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

+1

Я был знаком с: help, но я не был знаком с: help (command). Это будет очень полезно в будущем. Благодарю вас, сэр. – jnadro52

6

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

:-10,-7ya a 

дергать текст в буфер с именем а.

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

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

:-10,-7co . 

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

:-10,-7mo . 

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

11

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

:81,91t.<enter> 

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

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

5

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

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

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

81Gy91G 

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

+1

Я желаю, чтобы я мог продвигать это не один раз. Что-то, что помогло мне, было использовать это, чтобы янки в регистр (в моем случае зарегистрируйтесь + то есть буфер обмена): '' '81G + y91G''' – mgarey