Повторіть останню команду звичайного режиму, включаючи рухи, у Vim


25

У Vim, з ., я можу повторити останню команду нормального режиму; наприклад:

dd.

видаляє рядок двічі.
Але, якщо я набираю

5j.

курсор не рухається на 10 рядків вниз. Як повторити останню команду звичайного режиму, особливо хід?

Відповіді:


14

vimна жаль, це не робить. Найкраще, що ви можете зробити, це встановити плагін repmo.vim , який повторює команди руху, які мають кількість.


11

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


Варіант 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.