我想在vim中对打开缓冲区从光标到缓冲区末尾的每一行运行我刚刚录制到寄存器"x
"中的宏。我该如何做到这一点?
我知道我可以重复播放宏n次:
15@x
...或者只需按住@
直到我到达最后一行,但我想只需按几个按键即可完成。
就我个人而言,我会这样做
VG:normal @x
编辑:已更改为您指定的注册表项。
你可以在命令模式下执行以下操作:
:%normal @x
:.,$norm @x
可以工作 (其中的 .,$
表示从当前行 .
到最后一行 $
)。 - mattb制作递归宏:
qa@aq
例:
qa0gUwj@aq
使用单个@a,将当前行的第一个单词大写并将其到文件结尾的所有内容都转换为大写。但要确保"a寄存器为空:
let @a=""
%:normal
方法更有用,因为它考虑了宏内的任何行移动,所以在行的形式不完全相同时很有用。我觉得更容易创建一个名为'a'的宏来定义操作,然后让名为'b'的宏做递归部分,即qb@a@bq。 - Paul Ruanectrl-c
停止! - Iain Ballard:set nowrapscan
让其在到达文件末尾时失败并停止。 - ericbnqaq
即可:qaqqa0gUwj@aq
。此外,如果您忘记在结尾处放置@q
,则始终可以执行qA
开始附加一个寄存器,然后执行@q
。我通常记录到寄存器q中,因为这很容易(特别是对于递归宏),通常会执行qqqqqgUiwj@qq
而不是两个宏。前三个q
清除寄存器q,后两个q
开始记录。请参见http://vim.wikia.com/wiki/Record_a_recursive_macro。 - dylnmc:set nowrapscan
可以防止在文件中出现无限循环,因为它使得当到达 EOF 时 n
命令 失败,但我有一个疑问:@MaximKim,在你的示例中,宏是如何防止无限循环的? - Enlico999999@x
除非你有一个非常大的缓冲区...
%:normal @x
或者 1,$:normal @x
? - Nathan Fellman99999@x
只是自然而然的东西 :) - Peter从vim维基,简化版本: qqqqq来记录宏 @qq来结束录制 @q来执行它(并将运行到文件的结尾)