Повторите последнюю команду нормального режима, включая ходы, в Vim
В Vim, с .
Я могу повторить последнюю команду нормального режима; например:
dd.
удаляет строку дважды.
Но если я наберу
5j.
курсор не перемещается на 10 строк вниз. Как мне повторить последнюю команду нормального режима, особенно ход?
5 ответов
Это выполнимо даже в vanilla vim, но применимость зависит от вашего варианта использования, т.е. как часто вам нужно будет повторять это, так как для его повторения требуется еще несколько нажатий клавиш.
Вариант 1: превратить его в режим командного режима
используя, например, перемещение вниз на 5 строк, вы можете сделать:
- войти
:norm 5j
, он переместит курсор вниз на 5 строк - использование
@:
повторить движение
:norm
означает нормальный, любая следующая строка рассматривается как нажатия клавиш в нормальном режиме.
Вариант 2: использовать макрос
qa
(сохранить макрос в регистрa
, вы можете выбрать свой собственный регистр, какqb
,qc
)5j
q
(закончить запись макроса)@a
повторить записанную операцию (заменитьa
с выбранным вами регистровым именем, например.@b
,@c
)
макрос требует больше духовной силы для настройки, но он более повторяем в том смысле, что вы можете хранить несколько операций в разных регистрах без переопределения последними операциями.
vim
не делает это, к сожалению. Лучшее, что вы можете сделать, это установить плагин repmo.vim, который повторяет команды перемещения, которые имеют счетчик.
Вы можете повторить изменения с .
, Движения могут быть повторены с ;
команда. Эта команда кажется новой и выполняет те же действия, что и сценарий repmo.vim, упомянутый в других ответах.
Например, перейти ко второму следующему c
, Нажмите 2fc
, Затем, чтобы сделать это снова, просто введите ;
,
На самом деле .
повторяет последнее изменение, а не последнюю команду нормального режима. Как сказал Пол, вам понадобится плагин, который позволит вам повторять движения.
Увидеть ":help .
".
Вы можете выбрать строки, которые вы хотите изменить, и выполнить последнюю команду нормальной точки
v5j .............. visual select next 5 lines
:'<,'>norm! . normal mode execute over selection last command '.'