Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

[email protected]@@

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

Ответ 2

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

:'<,'>normal! .

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

" 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, пока не прокомментируете все, что хотите.

Ответ 3

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

Ответ 4

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

Ответ 5

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

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