Як я можу записати вкладений макрос?


11

Я хочу записати макрос у макрос, наприклад:

qa
    [ first macro ... ]
    qb
        [ second macro ... ]
    q
    [ some more stuff, involving @b ... ]
q

Однак другий qінтерпретується як прохання зупинити перший макрос, а решта інтерпретується як команди.

Чи є спосіб почати запис другого макросу в межах макросу?

Якщо ні, чи є якийсь інший спосіб досягти бажаного ефекту повторення певної послідовності натискань клавіш, поки вже всередині макросу?


1
Ви не можете спочатку записати макрос, bа потім записати aвиклик макросу @b?
statox

@statox Проблема в тому, що bмає руйнівні ефекти, тому я не можу спочатку записати його (якщо я не хочу записати його, натисніть uкупу разів, а потім почніть запис a).
Doorknob

1
Я думаю, що це ваше найкраще рішення. Зауважте, що ви також можете записати його в інший буфер ( enew, записати bd) або безпосередньо відредагувати bреєстр, записавши у свій файл вміст свого макросу, а потім "записавши" його, розмістивши символи в реєстрі "by.
statox

Відповіді:


10

AFAIK, ви не можете записати два макроси qx...qв одному кадрі. Для вашого вимоги, ви повинні створити макрос свого bшляху qb....q, а потім qa...@bq.

Якщо ви не хочете "записувати", bви можете зробити це, let @b='whatever'то @bвідтворіть макрос. Наприклад, let @b='ggdG'визначте макрос, bщоб видалити весь вміст вашого поточного буфера без "запису".

Існує фокус визначення макросу, який може не стосуватися вашого питання. Це рекурсивний макрос, а не вкладений макрос. Тобто ви можете:

qa..whatever..@aq

це буде рекурсивно відтворювати макрос a. Іноді це корисно, коли ми не знаємо, скільки разів хочемо відтворити макрос. Тому що при помилці відтворення макросу автоматично припиняється. Це економить, 999@aнаприклад.


1

Запис натискань клавіш на макро @a - це те ж саме, що янг тексту, відповідного цим натисканням клавіш для реєстрації. Після того, як щось зберігається в реєстрі, ви можете або помістити його, або відтворити його як макро / натискання клавіш. Таким чином, ви можете почати записувати макрос до @a через qa, тоді, поки макрос записується, виберіть текст, щоб зареєструвати b, можливо, використовуючи щось на зразок "bye. Все, що потрібно, - це виправити текст у інший регістр, ніж це було б, якби ви не вказали регістр b. Тепер, коли в регістрі b є якийсь текст, ви можете відтворити цей текст як натискання клавіш, натиснувши @b. Ви навіть можете це зробити, поки макро @a все ще записується. Це метамакролічно!

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

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