Как повторить некоторое действие определенные времена на Vim?

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

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

Там какой-либо путь состоит в том, чтобы несколько раз повторять последнюю ".j" часть?

22
задан Martín Fixman 13 July 2010 в 20:17
поделиться

5 ответов

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

qa.jq@a@@

Если вы знаете, сколько раз вы хотите повторить макрос, вы можете использовать 4 @@ или что-то еще.

34
ответ дан 29 November 2019 в 03:47
поделиться

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

3
ответ дан 29 November 2019 в 03:47
поделиться

Вы можете визуально выбрать строки, на которых хотите повторить это, наберите : 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 , пока не прокомментируете все, что хотите.

14
ответ дан 29 November 2019 в 03:47
поделиться

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

ma
jjjj
mb
:'a,'bs,^,// ,
2
ответ дан 29 November 2019 в 03:47
поделиться

Что касается вашего конкретного примера, я предпочитаю выполнять многострочную вставку с использованием режима визуального блока (доступ осуществляется с помощью 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 // , чтобы вставить комментарии сразу во все строки:

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

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

9
ответ дан 29 November 2019 в 03:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: