Я хочу записать макрос внутри макроса, вот так:
qa
[ first macro ... ]
qb
[ second macro ... ]
q
[ some more stuff, involving @b ... ]
q
Однако второй q
интерпретируется как запрос на остановку первого макроса, а остальные интерпретируются как команды.
Есть ли способ начать запись второго макроса внутри макроса?
Если нет, есть ли другой способ добиться желаемого эффекта повторения определенной последовательности нажатий клавиш, когда он уже находится внутри макроса?
b
а затем записатьa
вызов макроса@b
?b
имеет разрушительный эффект, поэтому я не могу сначала записать его (если я не хочу его записать, нажмитеu
несколько раз, а затем начните записьa
).enew
записьbd
) или напрямую отредактироватьb
регистр, записав в свой файл содержимое вашего макроса, а затем «записав» его, поместив символы в регистр с помощью"by
.Ответы:
AFAIK, вы не можете записать два макроса за
qx...q
один снимок. По вашему требованию вы должны создать макросb
к томуqb....q
времениqa...@bq
.Если вы не хотите , чтобы «запись»
b
вы можете сделатьlet @b='whatever'
то@b
повторит макрос. Например,let @b='ggdG'
определите макросb
для удаления всего содержимого вашего текущего буфера без «записи».Существует трюк определения макроса, который может не соответствовать вашему вопросу. Это рекурсивный макрос, а не вложенный макрос. То есть вы можете сделать:
qa..whatever..@aq
это будет рекурсивно воспроизводить макрос
a
. Иногда полезно, когда мы не знаем, сколько раз мы хотим воспроизвести макрос. Потому что, когда происходит ошибка, воспроизведение макроса автоматически останавливается. Это экономит999@a
например.источник
Запись нажатий клавиш в макрос @a - это то же самое, что набирать текст, соответствующий этим нажатиям клавиш, для регистрации a. Как только что-то сохранено в регистре, вы можете поместить его или воспроизвести как макрос / нажатие клавиш. Таким образом, вы можете начать запись макроса в @a через
qa
, а затем во время записи макроса восстановить текст, чтобы зарегистрировать b, возможно, используя что-то вроде"bye
. Все, что делает, это вставляет текст в регистр, отличный от того, который был бы, если бы вы не указали регистр b. Теперь, когда в регистре b есть некоторый текст, вы можете воспроизвести этот текст как нажатия клавиш, нажав@b
. Вы даже можете сделать это, пока макрос @a еще записывается. Это метакролитично!Основным недостатком этого является, вероятно, было бы легче написать некоторую функцию vimscript, которая делает то, что вы хотите, а затем, возможно, вызвать ее во время записи макроса. Прелесть макросов в том, что во время записи вы можете видеть эффект от того, что вы записываете, но этот метод мета-макросъемки несколько убирает это.
источник