我想x在vim中运行一个刚记录在寄存器“ ”中的宏,该宏在打开的缓冲区的每一行中,从我的光标到缓冲区的结尾。我怎么做?
我知道我可以将宏重播n次:
15@x
...或者按住@直到我到达最后一行,但我只想敲击几下并完成操作。
提前致谢。
Answers:
制作递归宏:
qa@aq
例如:
qa0gUwj@aq
它会使用单个@a来从当前行到文件末尾UPCASE第一个单词。但是请确保“一个寄存器为空:
let @a=""
%:normal方法更有用,因为它支持宏内的任何行移动,因此在行的形式不相同时很有用。我发现创建宏“ a”来定义动作,然后让宏“ b”执行递归位(即qb @ a @ bq)更加容易。
ctrl-c如果发生这种情况就停止!
:set nowrapscan使其失败并在到达文件末尾时停止。
qaq在宏之前执行:qaqqa0gUwj@aq。此外,如果您忘记将@q末尾放置,则始终qA可以开始添加寄存器,然后执行@q。我通常出于某种原因向reg q记录,因为它很容易(特别是对于递归宏),通常最终qqqqqgUiwj@qq代替两个宏。前三个q清除寄存器q,后两个清除q记录。参见vim.wikia.com/wiki/Record_a_recursive_macro
a寄存器可能是一种简单的类型qaq
999999@x,除非您有很大的缓冲区...
%:normal @x或1,$:normal @x?
99999@x这只是您急忙想出的自然方法:)
从vim Wiki缩短版:qqqqq记录宏@qq以完成记录@q来执行它(并将运行到文件结尾)