qa
[ first macro ... ]
qb
[ second macro ... ]
q
[ some more stuff, involving @b ... ]
q
但是,第二个
q
被解释为停止第一个宏的请求,其余的是是否有任何方法可以开始在宏中记录第二个宏?一定顺序的按键,而已经在宏中了?
#1 楼
AFAIK,您无法通过qx...q
一次拍摄两个宏。根据您的要求,您必须先通过b
创建一个qb....q
,然后再创建qa...@bq
。例如。 b
定义一个宏let @b='whatever'
删除当前缓冲区的所有内容而无需“记录”。有一个宏定义技巧,可能与您的问题无关。它是递归宏,而不是嵌套宏。也就是说,您可以执行以下操作:
@b
这将递归重播宏
let @b='ggdG'
。当我们不知道要重播宏多少次时,它有时很有用。因为发生错误时,宏重放将自动停止。例如,它保存b
。#2 楼
将击键记录到宏@a与拉动与那些击键对应的文本以注册a相同。将某物存储在寄存器中后,您可以将其放置或作为宏/按键来播放。因此,您可以开始通过qa
将宏记录到@a,然后在记录宏时,通过使用"bye
之类的方法将一些文本拉到寄存器b中。与未指定寄存器b的情况不同,将文本拉到另一个寄存器中的所有操作。现在寄存器b中包含一些文本,您可以按@b
将该文本作为按键回放。您甚至可以在仍记录宏@a的情况下执行此操作。 它的主要缺点是编写一些可以执行所需功能的vimscript函数,然后在宏录制过程中调用它可能会更容易。宏的美丽之处在于您可以在录制时看到录制内容的效果,但是这种元宏录制技术可以使录制效果有所收获。
评论
您不能先记录宏b然后记录宏a调用@b吗?@statox问题是b具有破坏性作用,所以我不能先录制它(除非我想录制它,按u几次,然后再开始录制a)。
我认为这是您最好的解决方案。请注意,您也可以将其记录在另一个缓冲区(enew,recording,bd)中,或者通过在文件中写入宏内容然后通过将字符放在“ by”中来“记录”它来直接编辑b寄存器。