2010-06-11 128 views
26

我知道:bufdo命令,并试图将它与我记录的宏(@a)结合在每个头文件的适当位置添加一个#include I' d加载。但是,我找不到在每个缓冲区上运行宏的简单方法。有没有办法通过ex模式执行宏,这是:bufdo需要什么?还是有我失踪的另一个命令?在vim中的所有缓冲区中运行一个宏

+0

看看http://stackoverflow.com/questions/1291962/replay-a-vim-macro-until-end-of-buffer 编辑:别提这 – gruntled 2010-06-11 16:07:16

+0

@gruntled:感谢您的链接。我忽略了这个问题,因为这个问题似乎并不适用,但这些技术应该可以工作。我投票结束了这个。 – 2010-06-11 16:09:32

回答

31

你能做到这样的:

:bufdo execute "normal @a" | write 

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

0

我唯一可以想到的方法是将:w:bn命令添加到宏中,以便它自动保存并移动到下一个缓冲区。然后我可以通过输入[email protected]在其他52个缓冲区上运行该命令。这工作,但对我来说是一个非常不同的概念模型比:bufdo,我希望别人会指出我的方向更类似于:bufdo

11

必须使用normal执行正常模式命令,在命令模式这样一个宏执行(@a):

:bufdo normal @a 
+1

只有当'autowrite'被启用时,这才会起作用,否则当它试图改变到第二个缓冲区时,它会停止并出错,因为它将放弃修改过的缓冲区。 – 2010-06-12 09:07:33

+0

@DaveKirby会这样工作,如果我们在宏中包含:w? – MeanEYE 2012-11-19 14:37:10

+1

@MeanEYE:是的,如果你用':w'结束你的宏,这个工作。 – 2014-07-19 10:38:51