Повторите последнюю команду нормального режима, включая ходы, в Vim


25

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

dd.

удаляет строку дважды.
Но если я наберу

5j.

курсор не перемещается на 10 строк вниз. Как мне повторить последнюю команду нормального режима, особенно ход?

Ответы:


14

vimне делает это, к сожалению. Лучшее, что вы можете сделать, это установить плагин repmo.vim , который повторяет команды перемещения, которые имеют счетчик.


11

это выполнимо даже в vanilla vim, но применимость зависит от вашего варианта использования, т.е. как часто вам нужно будет повторять это, так как для его повторения требуется еще несколько нажатий клавиш.


Вариант 1: превратить его в режим командного режима

используя, например, перемещение вниз на 5 строк, вы можете сделать:

  1. введите :norm 5j, он переместит курсор вниз на 5 строк
  2. использовать, @:чтобы повторить движение

:norm означает нормальный, любая следующая строка рассматривается как нажатия клавиш в нормальном режиме.


Вариант 2: использовать макрос

  1. qa(сохранить макрос в регистр a, вы можете выбрать свой собственный регистр, как qb, qc)
  2. 5j
  3. q (закончить запись макроса)
  4. @aповторить записанную операцию (замените aвыбранным вами именем регистра, например @b, @c)

макрос требует больше духовной силы для настройки, но он более повторяем в том смысле, что вы можете хранить несколько операций в разных регистрах без переопределения последними операциями.


7

Фактически .повторяет последнее изменение , а не последнюю команду нормального режима. Как сказал Пол, вам понадобится плагин, который позволит вам повторять движения.

Видеть ":help . ".


4

Вы можете повторить изменения с . . Движения могут повторяться с помощью ;команды. Эта команда кажется новой и выполняет те же действия, что и сценарий repmo.vim, упомянутый в других ответах.

Например, чтобы перейти ко второму следующему c, нажмите 2fc. Затем, чтобы сделать это снова, просто введите ;.


11
;не новый Это стандартная команда vi. Vi запоминает тип и целевой символ (но не числовой аргумент) последнего f/ F/ t/ Tдвижения и ;повторяет его. Однако это не повторяет другие движения.
пирократизм

Это сделало то, что я хотел сделать! Спасибо. и спасибо @pyrocrasty за разъяснения!
Пол

0

Вы можете выбрать строки, которые вы хотите изменить, и выполнить последнюю команду нормальной точки

v5j .............. visual select next 5 lines
:'<,'>norm! .      normal mode execute over selection last command '.'
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.