我想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来执行它(并将运行到文件结尾)