Eu quero gravar uma macro dentro de uma macro, assim:
qa
[ first macro ... ]
qb
[ second macro ... ]
q
[ some more stuff, involving @b ... ]
q
No entanto, o segundo q
é interpretado como uma solicitação para interromper a primeira macro e o restante é interpretado como comandos.
Existe alguma maneira de começar a gravar uma segunda macro em uma macro?
Caso contrário, existe outra maneira de obter o efeito desejado de repetir uma certa sequência de pressionamentos de tecla, enquanto já estiver dentro de uma macro?
b
e depois gravar aa
chamada de macro@b
?b
tem efeitos destrutivos, então não posso gravá-lo primeiro (a menos que queira gravá-lo, pressioneu
várias vezes e depois comece a gravara
).enew
, gravaçãobd
) ou editar diretamente ob
registro, escrevendo em seu arquivo o conteúdo da sua macro e, em seguida, "gravando", colocando os caracteres no registro com"by
.Respostas:
AFAIK, você não pode gravar duas macros de
qx...q
uma só vez. Para sua exigência, você deve criar macrob
atéqb....q
entãoqa...@bq
.Se você não quer "record"
b
que você pode fazerlet @b='whatever'
, em seguida,@b
irá reproduzir a macro. Por exemplo,let @b='ggdG'
defina uma macrob
para remover todo o conteúdo do seu buffer atual sem "gravar".Existe um truque de definição de macro, que pode não ser relevante para sua pergunta. É uma macro recursiva, não uma macro aninhada. Ou seja, você pode fazer:
qa..whatever..@aq
isso repetirá a macro recursivamente
a
. Às vezes, é útil quando não sabemos quantas vezes queremos reproduzir a macro. Porque quando ocorre um erro, a reprodução da macro para automaticamente. Isso salva,999@a
por exemplo.fonte
Gravar as teclas digitadas na macro @a é o mesmo que puxar o texto correspondente a essas teclas para registrar a. Depois que algo é armazenado em um registro, você pode colocá-lo ou reproduzi-lo como uma macro / pressionamento de teclas. Assim, você pode começar a gravar uma macro em @a via e
qa
, enquanto a macro estiver gravando, puxe algum texto para registrar b, talvez usando algo como"bye
. Tudo o que faz é puxar o texto para um registro diferente do que seria se você não especificasse o registro b. Agora que o registro b possui algum texto, você pode reproduzir esse texto como toque nas teclas pressionando@b
. Você pode fazer isso enquanto a macro @a ainda estiver sendo gravada. É metamacrólico!A principal desvantagem disso é que provavelmente seria mais fácil escrever alguma função vimscript que faça o que você deseja e, talvez, chamá-la durante uma gravação de macro. A beleza das macros é que você pode ver o efeito do que está gravando enquanto o grava, mas essa técnica de gravação de meta macro tira isso um pouco.
fonte