【问题标题】:Run a macro in all buffers in vim在 vim 的所有缓冲区中运行宏
【发布时间】:2011-03-02 17:54:05
【问题描述】:

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

【问题讨论】:

  • 看看stackoverflow.com/questions/1291962/… 编辑:没关系
  • @gruntled:感谢您的链接。我跳过了这个问题,因为这个问题似乎并不适用,但这些技术应该有效。我投票决定关闭这个。

标签: vim macros


【解决方案1】:

你可以这样做:

:bufdo execute "normal @a" | write

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

【讨论】:

    【解决方案2】:

    你必须使用normal来执行普通模式的命令,比如命令模式下的宏执行(@a):

    :bufdo normal @a
    

    【讨论】:

    • 这只有在 'autowrite' 被启用的情况下才有效,否则它会在尝试更改到第二个缓冲区时停止并出现错误,因为它将放弃修改过的缓冲区。
    • 我会在运行之前执行:se hidden,这样我就可以在不保存的情况下切换到另一个缓冲区;然后将所有缓冲区与:wa 一起保存
    【解决方案3】:

    我能想到的唯一选择是将:w 和:bn 命令添加到宏中,以便它会自动保存并移动到下一个缓冲区。然后我可以通过键入52@a 在其他 52 个缓冲区上运行该命令。这行得通,但对我来说是一个与:bufdo 大不相同的概念模型,我希望其他人能指出我更类似于:bufdo 的方向。

    【讨论】:

      猜你喜欢
      • 2012-08-29
      • 2010-11-20
      • 2011-09-26
      • 1970-01-01
      • 2013-09-03
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      相关资源
      最近更新 更多