Chcę nagrać makro wewnątrz makra, tak jak to:
qa
[ first macro ... ]
qb
[ second macro ... ]
q
[ some more stuff, involving @b ... ]
q
Jednak drugie q
jest interpretowane jako żądanie zatrzymania pierwszego makra, a reszta jest interpretowana jako polecenia.
Czy jest jakiś sposób, aby rozpocząć rejestrowanie drugiego makra w makrze?
Jeśli nie, to czy istnieje jakiś inny sposób na osiągnięcie pożądanego efektu powtarzania określonej sekwencji naciśnięć klawiszy, gdy już znajduje się on w makrze?
b
a następniea
wywołać wywołanie makra@b
?b
ma destrukcyjne działanie, więc nie mogę go najpierw nagrać (chyba że chcę go nagrać, nacisnąću
kilka razy, a następnie rozpocząć nagrywaniea
).enew
, nagrywaniebd
) lub bezpośrednio edytowaćb
rejestr, zapisując w pliku zawartość makra, a następnie „nagrywając”, umieszczając znaki w rejestrze za pomocą"by
.Odpowiedzi:
AFAIK, nie można nagrać dwóch makr za
qx...q
jednym razem. Aby spełnić twoje wymagania, musisz utworzyć makrob
doqb....q
tego czasuqa...@bq
.Jeśli nie chcesz, aby „Record”
b
można zrobićlet @b='whatever'
wtedy@b
będzie odtwarzać makra. Np.let @b='ggdG'
Zdefiniuj makro,b
aby usunąć całą zawartość bieżącego bufora bez „nagrywania”.Istnieje sztuczka polegająca na definicji makra, która może nie mieć związku z twoim pytaniem. Jest to makro rekurencyjne, a nie zagnieżdżone. Oznacza to, że możesz:
qa..whatever..@aq
spowoduje to rekurencyjne odtworzenie makra
a
. Czasami jest to przydatne, gdy nie wiemy, ile razy chcemy odtworzyć makro. Ponieważ w przypadku wystąpienia błędu odtwarzanie makra zostanie automatycznie zatrzymane. Oszczędza999@a
na przykład.źródło
Rejestrowanie naciśnięć klawiszy na makrze @a jest tym samym, co szarpanie tekstu odpowiadającego tym naciśnięciom klawiszy w celu zarejestrowania. Gdy coś zostanie zapisane w rejestrze, możesz go umieścić lub odtworzyć jako makro / naciśnięcia klawiszy. Aby rozpocząć rejestrowanie makra na @a
qa
, wtedy, gdy makro jest w trakcie nagrywania, pociągnij za tekst, aby zarejestrować b, być może używając czegoś podobnego"bye
. Wszystko, co robi, to przeciągnięcie tekstu do innego rejestru niż w przypadku, gdy nie określono rejestru b. Teraz, gdy rejestr b ma w sobie tekst, możesz go odtworzyć jako naciśnięcie klawisza, naciskając@b
. Możesz to zrobić nawet podczas rejestrowania makra @a. To jest metamakroliczne!Główną wadą tego jest to, że prawdopodobnie łatwiej byłoby napisać jakąś funkcję vimscript, która robi to, co chcesz, a następnie wywołać ją podczas nagrywania makra. Piękno makr polega na tym, że możesz zobaczyć efekt tego, co nagrywasz podczas nagrywania, ale ta technika nagrywania meta makr nieco to odbiera.
źródło