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