在vim中的所有缓冲区中运行宏

在vim中的所有缓冲区中运行宏,vim,macros,Vim,Macros,我知道:bufdo命令,并试图将它与我录制的宏(@a)结合起来,在我加载的每个头文件的适当位置添加一个“include”。但是,我找不到在每个缓冲区上运行宏的简单方法。是否有一种方法可以通过ex模式执行宏,而这正是:bufdo所需要的?还是我缺少了另一个命令?我能想到的唯一替代方法是将:w和:bn命令添加到宏中,这样宏就会自动保存并移动到下一个缓冲区。然后,我可以通过键入52@a。这是可行的,但对我来说,这是一个与:bufdo截然不同的概念模型,我希望其他人能为我指出一个更类似于:bufdo的方

我知道
:bufdo
命令,并试图将它与我录制的宏(
@a
)结合起来,在我加载的每个头文件的适当位置添加一个“include”。但是,我找不到在每个缓冲区上运行宏的简单方法。是否有一种方法可以通过ex模式执行宏,而这正是
:bufdo
所需要的?还是我缺少了另一个命令?

我能想到的唯一替代方法是将
:w
:bn
命令添加到宏中,这样宏就会自动保存并移动到下一个缓冲区。然后,我可以通过键入
52@a
。这是可行的,但对我来说,这是一个与
:bufdo
截然不同的概念模型,我希望其他人能为我指出一个更类似于
:bufdo
的方向,你必须使用它来执行普通模式的命令,比如命令模式下的宏执行(
@a
):


您可以这样做:

:bufdo execute "normal @a" | write

normal命令将运行宏,但必须使用:execute运行宏,否则管道字符将被解释为正常模式字符。

查看编辑:没关系this@gruntled:谢谢你的链接。我跳过了这个问题,因为这个问题似乎不适用,但技术应该有效。我投票关闭了这个缓冲区。这只有在启用“自动写入”的情况下才会起作用,否则,当它试图更改到第二个缓冲区时,它将停止并出现错误,因为它将放弃一个修改过的缓冲区。我会在运行此操作之前执行
:se hidden
,以便我可以更改到另一个缓冲区而不保存;然后将所有缓冲区与
:wa一起保存
:bufdo execute "normal @a" | write