2010-06-11 86 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

相關問題