Come posso registrare una macro nidificata?


11

Voglio registrare una macro all'interno di una macro, in questo modo:

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

Tuttavia, la seconda qviene interpretata come una richiesta di arresto della prima macro e il resto viene interpretato come comandi.

C'è un modo per iniziare a registrare una seconda macro all'interno di una macro?

In caso contrario, esiste un altro modo per ottenere l'effetto desiderato di ripetere una determinata sequenza di tasti, mentre si è già all'interno di una macro?


1
Non è possibile prima registrare la macro be quindi registrare la achiamata macro @b?
statox

@statox Il problema è che bha effetti distruttivi, quindi non posso registrarlo prima (a meno che non voglia registrarlo, premere uun sacco di volte e quindi iniziare a registrare a).
Doorknob,

1
Penso che sia la tua migliore soluzione. Nota che potresti anche registrarlo in un altro buffer ( enew, registrazione, bd) o modificare direttamente il bregistro scrivendo nel tuo file il contenuto della tua macro e poi "registrandolo" posizionando i caratteri nel registro con "by.
statox

Risposte:


10

AFAIK, non puoi registrare due macro qx...qin un colpo solo. Per il vostro requisito, è necessario creare macro bda qb....qallora qa...@bq.

Se non si vuole "record" bsi può fare let @b='whatever'allora @bripete la macro. Ad esempio, let @b='ggdG'definire una macro bper rimuovere tutto il contenuto del buffer corrente senza "registrazione".

Esiste un trucco di definizione macro, che potrebbe non essere rilevante per la tua domanda. È una macro ricorsiva, non una macro nidificata. Cioè, puoi fare:

qa..whatever..@aq

questo ripeterà ricorsivamente la macro a. A volte è utile quando non sappiamo quante volte vogliamo riprodurre la macro. Perché quando si verifica un errore, la riproduzione macro si interromperà automaticamente. Salva 999@aper esempio.


1

Registrare i tasti sulla macro @a è la stessa cosa che tirare il testo corrispondente a quei tasti per registrare a. Una volta che qualcosa è memorizzato in un registro, puoi metterlo o riprodurlo come una macro / sequenze di tasti. Quindi potresti iniziare a registrare una macro su @a via qa, quindi mentre la macro sta registrando, tira un po 'di testo per registrare b, magari usando qualcosa come "bye. Tutto ciò che fa è trascinare il testo in un registro diverso da quello che farebbe se non specificassi il registro b. Ora che il registro b contiene del testo, è possibile riprodurre quel testo come tasti premendo @b. Puoi persino farlo mentre la macro @a è ancora in fase di registrazione. È metamacrolico!

Il principale svantaggio di questo è che sarebbe probabilmente più facile scrivere alcune funzioni di vimscript che facciano quello che vuoi, e quindi chiamarlo durante una registrazione macro. Il bello dei macro è che puoi vedere l'effetto di ciò che stai registrando mentre lo registri, ma questa tecnica di registrazione di macro macro lo toglie un po '.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.