Збережіть останню дію (.) У макросі


9

Використовуйте кейс

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

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

Останнє - це те, що я хочу зробити, але найпростіший спосіб, який я можу зробити, це зробити непросто - скасуйте зміну, починайте записувати макрос і повторно вкажіть команду, щоб внести необхідні зміни і припинити запис макросу.

Що я пробував поки що:

Запис точки в макросі не працює, оскільки вона записує крапку, а не зміну, яку виконує точка. (Наприклад, скажімо, що команда, збережена в крапці, була: d5wЯкщо ви почнете записувати макрос і виконувати дію через. Розраховуючи, що він буде видаляти 5 слів кожного разу, коли ви запускаєте макрос, це не відбудеться. Наступного разу, коли ви запустите макрос він буде робити крапку, а не команду d5w. Це означає, що якщо ви зробили якусь іншу зміну після запису макросу - скажіть, видаліть 3 слова за допомогою, d3wі це було останнє, яке ви здійснили, тоді, коли ви запустите макрос, він видалить 3 слова, а не 5, тому що це просто працює .)


Я намагаюся зрозуміти, що ти хочеш робити, і чому ти не робиш нічого, що є з макросом.

1
@DrEval ОП розуміє після виконання команди в звичайному режимі, що їм слід було зберегти його в макросі, і не хоче знову вводити його під час запису макросу.
Багатий

Відповіді:


2

Vim не зберігає історію команд звичайного режиму. Якщо ви хочете зберегти історію свого звичайного режиму, ви можете скористатися цим для збереження у файлі: https://vi.stackexchange.com/a/587/13848

Команди звичайного режиму зазвичай короткі, тому люди просто набирають його в звичайному режимі, а не намагаються створювати макроси. Однак якщо ви хочете створити макроси з команд звичайного режиму, ви можете перетворити його в Exкоманду режиму, а потім зберегти його в макрос, як вказував @wmmso. Це можна зробити за допомогою normкоманди. Отже, якщо ви хочете видалити 2 слова, починаючи з поточної позиції курсору, і використовуйте команду звичайного режиму в Exрежимі використання :norm d2w. (Посилання: http://vimdoc.sourceforge.net/htmldoc/various.html#:norm , Виконати звичайну команду над діапазоном )

Краще використовувати Exкоманду mode, якщо це складна команда, оскільки вона дозволяє набрати повну команду в буфер, переконатися, що вона фактично правильна, а також зберегти її в історії командного рядка.

Тепер, коли у вас є звичайний режим команди в колишньому режимі, ви також можете переглядати свою команду, як історія, використовуючи q:, а потім скопіювати її в реєстр за допомогою "ay$, перебуваючи в рядку, що містить командний рядок, який ви хочете зберегти в макрос. Потім, коли ви хочете запустити макрос, ви можете виконати його за допомогою@a


Як би ви написали команду звичайного режиму в командному рядку? наприклад d2w?
Peeyush Kushwaha

У відповідь додано кілька уточнень. Чи це допомагає?
alpha_989

0

скопіюйте вміст регістра ":" (що ви щойно зробили) в інший реєстр, наприклад, зареєструйте:

:let @a = @:

ви можете виконати його знову, використовуючи

@a

Це не працює для мене в vim 7.4. Здається, що реєстр :містить останню виконану команду через команду :command-name-goes-hereзвичайного режиму, наприкладd2w
Peeyush Kushwaha

2
Це рішення працює лише для колишніх команд, а не для звичайних команд. Мені невідомо про реєстр, який містить останню команду звичайного режиму. Буде корисно
Стів
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.