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

44

我知道:bufdo命令,并尝试将其与我录制的宏(@a)结合起来,在每个已加载的头文件的适当位置添加一个#include。不过,我无法找到一种简单的方法在每个缓冲区上运行该宏。是否有一种方式可以通过ex mode执行宏,这是:bufdo所需的?或者还有其他我不知道的命令吗?


请查看https://dev59.com/93M_5IYBdhLWcg3wp0wX编辑:不用理会这个。 - gruntled
@gruntled:感谢提供链接。我之前跳过了,因为问题似乎不适用,但是这些技术应该可以解决问题。我投票关闭此问题。 - Caleb Huitt - cjhuitt
3个回答

54

你可以这样做:

:bufdo execute "normal @a" | write

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


15

你必须使用normal命令来执行正常模式下的命令,例如在命令模式下执行宏(@a):

:bufdo normal @a

1
只有在启用“autowrite”时,此功能才能正常工作;否则,当尝试切换到第二个缓冲区并放弃已修改的缓冲区时,它将停止并显示错误。 - Dave Kirby
3
我会在执行这个命令之前使用 :se hidden,以便我可以切换到另一个缓冲区而不保存; 然后用 :wa 一次性保存所有缓冲区。 - Gautam

0
我能想到的唯一替代方案是将:w:bn命令添加到宏中,这样它就会自动保存并移动到下一个缓冲区。然后,我可以通过键入52@a在其他52个缓冲区上运行该命令。这种方法虽然可行,但对我来说与:bufdo的概念模型有很大不同,我希望有人能指点我找到更类似于:bufdo的东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接