Как мне повторить любую команду в Vim, например C-x z в emacs?

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

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

Может есть какие плагины? Аналогично этому вопросу.

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


person johv    schedule 25.01.2011    source источник


Ответы (5)


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

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

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

person Ravikiran    schedule 25.01.2011
comment
А как насчет команд обычного режима, таких как gE? Есть команда :norm для выполнения команд нормального режима из командной строки, но она не повторяется... - person johv; 25.01.2011
comment
что вообще делает gE ? я попытался dw удалить слово, а затем нажал ., чтобы удалить другое слово - person Ravikiran; 25.01.2011
comment
Это команда движения, Назад в конец СЛОВА, обратная Е. - person johv; 25.01.2011
comment
ctr+P используется для автодополнения кода, поэтому вы, вероятно, не захотите переназначать его на это - person Ferdinando Randisi; 27.05.2014
comment
Ctrl+P также отображается на так известный плагин CtrlP - person Patrick Bassut; 20.08.2014
comment
сопоставление автозаполнения обычно представляет собой сопоставление режима вставки (imap), поэтому вы можете использовать nmap, если хотите включить карту только в обычном режиме. - person Lie Ryan; 01.11.2018

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

person Matt Glover    schedule 25.01.2011

Для команд движения в Vim нет встроенного механизма. Команды «Найти» и «Кому» (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 с использованием ;

person jpnp    schedule 11.11.2013

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

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

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

person Manan    schedule 29.07.2016

Вы можете сопоставить @: с какой-либо клавишей для большего удобства:

:map <F2> @:

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

person insider    schedule 18.06.2013