Как мне повторить последние n изменений в Vim? - PullRequest
39 голосов
/ 11 июля 2011

Выполнение . повторяет последнее изменение.Выполнение 2. повторяет последнее изменение два раза.

Но представьте, что я хочу повторить изменение до последнего.Как мне это сделать в Vim?

Ответы [ 3 ]

31 голосов
/ 11 июля 2011

Не думаю, что вы можете, см. :help . Однако, что вы можете сделать, это записать макрос для ваших правок, у вас есть множество регистров на выбор {0-9a-zA-Z"} (заглавными буквами для добавления).Затем используйте, например, @u для редактирования 1, @t для редактирования 2 и т. Д.

Отличные советы по записи из Лучшие из советов VIM

" Recording (BEST TIP of ALL)
qq  # record to q
your complex series of commands
q   # end recording
@q to execute
@@ to Repeat
5@@ to Repeat 5 times
qQ@qq                             : Make an existing recording q recursive *N*
" editing a register/recording
"qp                               :display contents of register q (normal mode)
<ctrl-R>q                         :display contents of register q (insert mode)
" you can now see recording contents, edit as required
"qdd                              :put changed contacts back into q
@q                                :execute recording/register q

Посмотрите на них, чтобы узнать больше подсказок:

:&     last substitute
:%&    last substitute every line
:%&gic last substitute every line confirm
g%     normal mode repeat last substitute
g&     last substitute on all lines
@@     last recording
@:     last command-mode command
:!!    last :! command
:~     last substitute
:help repeating
6 голосов
/ 30 мая 2013

Я написал плагин RepeatLast.vim , чтобы удовлетворить это точное требование.Он обеспечивает привязку клавиш 5\. для повторения последних 5 изменений (включая движения) и 2\D для отбрасывания / забывания последних 2 действий.

Работает, постоянно включая запись макросов , что может быть нежелательным для всех.Но если вы можете жить с этим, он работает в 99% случаев использования.

Последняя версия: https://github.com/joeytwiddle/RepeatLast.vim (Пожалуйста, обратная связь!)

Предостережения:

Пожалуйста, :set ch=2, чтобы первая строка вывода не была скрыта сообщением "record".

1% случаев, когда он не работает должным образом, обычно связаны с:

  1. Трудности, вызывающие событие CursorHold медленно без потери быстрых повторных нажатий
  2. Нежелательная запись клавиш [Пробел] и [Ввод], когда пользователь отвечает на приглашение.

Тренировка мышц q для упреждающей записи макросов может быть лучшим подходом в долгосрочной перспективе.; -)

0 голосов
/ 29 апреля 2018

Основываясь на ответе Фредрика Фила, вот пример:

Запись вашего макроса

Ниже показано, как записать макрос для удаления всего, включаястрока в кавычках и хранить в регистре d.Команда для удаления строки: da".Таким образом, чтобы сохранить эту команду в макрорегистре d, мы можем просто сделать это:

qdda"q

Обратите внимание, что она начинается и заканчивается буквой q.Вторым символом является регистр, в данном случае d для удаления.Но мы могли бы дать ему любую букву или цифру.Оставшиеся символы da" являются нашей командой.

Использование нашего макроса

Теперь, когда наш макрос записан, мы можем вызвать его с помощью символа @, за которым следует регистр:

@d

Повтор последней макрокоманды

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

@@
...