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

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

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

есть ли способ повторить последнее ".ж" части несколько раз?

5 ответов


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

qa.jq@a@@

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


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


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

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

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


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


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

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