我有一个包含一堆行的文件。我记录了一个在单行上执行操作的宏。我想在文件中的所有剩余行上重复该宏。有没有快速的方法来做到这一点?
我尝试了 Ctrl+Q,突出显示了一组行,然后按了 @@,但这似乎没有奏效。
在 Ex 模式下使用 normal 命令在多行/所有行上执行宏:
在第 5 行到第 10 行执行存储在寄存器 a 中的宏。
:5,10norm! @a
在第 5 行到文件末尾执行存储在寄存器 a 中的宏。
:5,$norm! @a
在所有行上执行存储在寄存器 a 中的宏。
:%norm! @a
在匹配模式的所有行上执行寄存器 a 中的宏存储。
:g/pattern/norm! @a
要在视觉选定的行上执行宏,请按 V 和 j 或 k 直到选择所需的区域。然后键入 :norm! @a
并观察显示以下输入行。
:'<,'>norm! @a
在 vim 中输入 :help normal 以阅读更多内容。
你也可以这样做:
在正常模式下:
[number of times to apply the macro] @ [register]
例如:
1000@q
将寄存器 q 中的宏应用到接下来的 1000 行。
更新:接受的答案要好得多更新:正如@kevinliu 指出的那样,您可能希望以 aj 结束宏以转到下一行。
:%norm! @a
和 vGG :norm! @a
j
命令结尾才能进入下一行,否则它将尝试将其应用于同一行。
还有一个名为 RangeMacro 的插件,完全符合您的要求!对于无法通过名称猜测的每个人,它的作用是:它为给定范围内的每一行重复录制的宏,无论是通过视觉选择还是通过 :40,50 / :+10
请参阅http://www.vim.org/scripts/script.php?script_id=3271
不定期副业成功案例分享
:norm! @a
:
时,Ex 输入行将改为:'<,'>
,然后您将添加 Kevin 建议的其余内容。这将使最终命令读取::'<,'>norm! @a
。!
避免用户重新映射键。您可能不需要它,但适用于每个人的答案需要它。