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

发布于 2024-07-10 00:46:47 字数 126 浏览 7 评论 0原文

我有一个包含一堆行的文件。 我录制了一个在单行上执行操作的宏。 我想在文件中的所有剩余行上重复该宏。 有没有快速的方法来做到这一点?

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

I have a file with a bunch of lines. I have recorded a macro that performs an operation on a single line. I want to repeat that macro on all of the remaining lines in the file. Is there a quick way to do this?

I tried Ctrl+Q, highlighted a set of lines, and pressed @@, but that didn't seem to do the trick.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

眼眸 2024-07-17 00:46:47

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

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

:5,10norm! @a

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

:5,$norm! @a

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

:%norm! @a

在匹配模式的所有行上执行寄存器a中的宏存储。

:g/pattern/norm! @a

要在可视选择的行上执行宏,请按 Vjk 直至选择所需区域。 然后输入 :norm! @a 并观察显示的以下输入行。

:'<,'>norm! @a

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

Use the normal command in Ex mode to execute the macro on multiple/all lines:

Execute the macro stored in register a on lines 5 through 10.

:5,10norm! @a

Execute the macro stored in register a on lines 5 through the end of the file.

:5,$norm! @a

Execute the macro stored in register a on all lines.

:%norm! @a

Execute the macro store in register a on all lines matching pattern.

:g/pattern/norm! @a

To execute the macro on visually selected lines, press V and the j or k until the desired region is selected. Then type :norm! @a and observe the that following input line is shown.

:'<,'>norm! @a

Enter :help normal in vim to read more.

我做我的改变 2024-07-17 00:46:47

使用 global 在包含 'pattern' 的所有行上运行宏 'a'

:g/pattern/normal! @a

如需帮助,请检查::全局帮助

Use global to run the macro 'a' on all lines that contain 'pattern'

:g/pattern/normal! @a

For help, check: :help global.

稍尽春風 2024-07-17 00:46:47

您还可以这样做:

在正常模式下:

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

例如:

1000@q

将寄存器 q 中的宏应用到接下来的 1000 行。

更新:接受的答案要好得多

更新:正如 @kevinliu 指出的那样,您可能希望以 j 结束宏以转到下一行。

You can also do this:

In normal mode:

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

For example:

1000@q

Apply the macro in register q to the next 1000 lines.

Update: the accepted answer is a lot better

Update: as @kevinliu pointed out, you likely want to end the macro with a j to go to the next line.

记忆で 2024-07-17 00:46:47

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

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

There's also a plugin called RangeMacro, does exactly what you want! For everyone that can't guess by the name, what it does: it repeats a recorded macro for each line in a given range, no matter if by visual selection or by a :40,50 / :+10

See http://www.vim.org/scripts/script.php?script_id=3271

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文