Как мне повторить любую команду в Vim, например "Cx z" в emacs? - PullRequest
46 голосов
/ 25 января 2011

В Vim есть ли способ повторить последнюю команду независимо от того, было ли это редактирование или нет, и без предвидения первой записи макроса?

Например, сказать, что я печатаю :bn,и хочу сделать это снова (это был неправильный файл).Нажатие ., очевидно, не делает этого.Или, может быть, я делаю gE и хочу повторить это (одним нажатием клавиши, поскольку явно gE набирать текст довольно болезненно).

Возможно, есть некоторые плагины?Похоже на этот вопрос .

(Даже круче было бы задним числом связать несколько команд с макросом, поэтому можно было бы набрать 5qa@a или что-то, чтобы повторить последние 5 команд ...)

Ответы [ 5 ]

64 голосов
/ 25 января 2011

Чтобы повторить команду из командной строки, попробуйте @:, Чтобы повторить команду в обычном режиме / режиме вставки, попробуйте .,

Добавьте приведенное ниже отображение в ваш .vimrc, если вы хотите ярлыкто же самое: -

:noremap <C-P> @:<CR> - это сопоставит Ctrl + P с предыдущей командой командной строки.Вы можете сопоставить любую другую комбинацию.

13 голосов
/ 25 января 2011

:help repeating предоставит типичные команды повтора (например, @: и т. Д.).Вы можете попробовать repeat.vim .Это может приблизить вас к тому, что вы ищете.

10 голосов
/ 11 ноября 2013

Для команд движения в Vim нет встроенного механизма.Команды Find и To (f / F / t / T) имеют ; и , для повтора и обратного хода.Есть пара плагинов, которые расширяют эти привязки для повторения других команд движения:

http://www.vim.org/scripts/script.php?script_id=2174

http://www.vim.org/scripts/script.php?script_id=3665

Последующие должны поддерживать повторение gE с использованием ;

8 голосов
/ 29 июля 2016

Вы можете просто использовать "."

Пример: У вас есть "abc" в 10 местах в вашем файле, и вы хотите заменить его на "def" в 5 местах.

Шаг 1: Найдите первое вхождение abc, набрав команду "/ abc"
Шаг 2: Когда курсор находится на «abc», замените abc командой «cw», чтобы вывести слово «abc»
Шаг 3: введите «def» в качестве замены и нажмите ввод, чтобы перейти в командный режим
Шаг 4. Чтобы повторить это действие, просто введите команду «n», чтобы перейти к следующему появлению abc , и введите команду «.» . Команда запоминает, что вы заменили «abc» на «def» в прошлый раз, и вы выполните то же самое здесь.

1 голос
/ 18 июня 2013

Вы можете сопоставить @: с некоторыми ключами для большего удобства:

:map <F2> @:

и тогда его проще использовать с повторениями.

...