在Vim中,如何将宏应用于一组行?

时间:2008-12-23 21:51:29

标签: vim vim-macros

我有一堆行文件。我记录了一个在一行上执行操作的宏。我想在文件中的所有剩余行上重复该宏。有快速的方法吗?

我尝试了Ctrl + Q,突出显示了一组行,然后按了@@,但这似乎没有做到这一点。

4 个答案:

答案 0 :(得分:304)

在Ex模式下使用normal命令在多行/所有行上执行宏:

执行存储在第5到第10行的 a 寄存器中的宏。

:5,10norm! @a

执行存储在第5行到文件末尾的寄存器 a 中的宏。

:5,$norm! @a

执行存储在所有行的 a 寄存器中的宏。

:%norm! @a

在匹配 pattern 的所有行上执行注册 a 中的宏存储。

:g/pattern/norm! @a

要在视觉选择的线条上执行宏,请按 V j k ,直到选中所需的区域。然后键入:norm! @a并观察显示的后续输入行。

:'<,'>norm! @a

在vim中输入:help normal 以阅读更多内容。

答案 1 :(得分:58)

使用global在包含'pattern'

的所有行上运行宏'a'
:g/pattern/normal! @a

如需帮助,请查看::help global

答案 2 :(得分:33)

你也可以这样做:

在正常模式下:

[number of times to apply the macro] @ [register]

例如:

1000@q

将寄存器q中的宏应用于下一行1000行。

答案 3 :(得分:2)

还有一个名为RangeMacro的插件,完全符合您的要求!对于每个无法通过名称猜测的人,它的作用是:它为给定范围内的每一行重复录制的宏,无论是通过视觉选择还是通过:40,50 /:+10

请参阅http://www.vim.org/scripts/script.php?script_id=3271