2010-07-13 2 views
19

В Vim я обычно хочу несколько раз повторять несколько команд. Скажем, я хочу прокомментировать 5 строк, я хотел бы использоватьКак повторить какое-то действие на Vim?

I//<Esc>j 
.j.j.j.j 

Есть ли способ, чтобы повторить последний «.j» часть в несколько раз?

+1

Вы имеете в виду что-то вроде '5',' j'? –

+0

Это круглый ответ на ваши нужды, если не на прямой вопрос. Что вы, кажется, здесь делаете, комментирует 5 строк кода. Если это ваше единственное требование, вы должны использовать надстройку NERD Commenter. Это добавление позволяет вам ввести '5 \ cc', который комментирует текущую строку и 4 следующие строки кода. '5 \ cs' будет делать то же самое, но при попытке добавить комментарии' // 'line добавит'/* 'и' */', чтобы блокировать комментарии ваших строк. Гораздо более универсальный. – cartbeforehorse

ответ

27

Один из способов сделать это - назначить последовательность клавиш макросу, а затем запустить макрос один раз, за ​​которым следует команда @@ run-last-macro. Например:

[email protected]@@ 

Если вы знаете, сколько раз вы хотите повторить макрос, вы можете использовать [email protected]@ или любой другой.

+0

Интересно, что у меня разные результаты для '@@@@@@@@' и '4 @@' ... – Alex

+0

8-летний ответ, и это все еще работает. Завещание о силе vim. –

3

Для вашего конкретного примера. вы также можете использовать диапазон .,.5s#^#//# (для этого и следующие 5 строк) или визуальный блок (нажмите v, затем выберите нужный текст), а затем :%s#^#//#.

+0

Вы также можете использовать «: s #^# // # 5» (счетчик строк находится в конце). – Neil

2

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

ma 
jjjj 
mb 
:'a,'bs,^,// ,
8

Что касается вашего конкретного примера, я предпочитаю делать вставку из нескольких строк, используя режим визуального блока (доступ с Ctrl-v). Например, если бы я имел следующие строки:

This should be a comment. 
So should this. 
This is definitely a comment. 
Is this a comment? Yes. 

Я бы к началу первого символа в верхней строке, нажмите Ctrl-v, чтобы войти в режим визуального блока, перейти к последней строке (возможно, с помощью 3j двигаться вниз 3 строки, возможно, используя 4g, чтобы перейти непосредственно к 4-ой линии, или, может быть, просто G идти до конца), а затем введите I// <esc> вставить комментарии по всем направлениям сразу:

// This should be a comment. 
// So should this. 
// This is definitely a comment. 
// Is this a comment? Yes. 

Кроме того, есть очень удобный плагин commenter/un-commenter, поддерживающий многие языки here. Это проще, чем вручную вставлять/удалять комментарии.

+0

Я использую этот: http://vim.sourceforge.net/scripts/script.php?script_id=1173 Довольно приятно. – ThePosey

+0

Хмм, этот метод 'Ctrl-V' не работает для меня ... Только вставляет в первую строку. Может быть, это потому, что я все еще на vim 7.2 ... – weronika

+0

@weronika Вы 'gvim'? – isomorphismes

13

Вы можете визуально выбрать линии, которые хотите повторить, введите :normal! ., чтобы использовать vim . на каждой строке. Потому что вы начали с визуальным выделением, он заканчивает тем, как это:

:'<,'>normal! . 

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

" add // comment with K 
noremap K :s,^\(//\)\=,//,e <BAR> nohls<CR>j 
" remove // comment with CTRL+K 
noremap <C-K> :s,^//,,e <BAR> nohls<CR>j 

Вы можете использовать 5K, чтобы прокомментировать 5 строк, вы можете использовать визуальный режим, чтобы сначала выбрать свои строки, или вы можете просто забить K, пока не прокомментируете все, что хотите.

Смежные вопросы