重放vim宏直到缓冲区结束

Kev*_*vin 79 vim macros

我想在x一个打开的缓冲区的每一行上运行一个我刚刚记录在寄存器中的宏,从我的光标到缓冲区的末尾,在vim中.我怎么做?

我知道我可以重播宏n次:

15@x
Run Code Online (Sandbox Code Playgroud)

...或者只是按住@直到我到达最后一行,但我想点击几下击键并完成它.

提前致谢.

Ran*_*ris 92

就我个人而言

VG:normal @x
Run Code Online (Sandbox Code Playgroud)

编辑:将寄存器更改为您指定的寄存器.


rya*_*n_s 59

你可以做(​​在命令模式下)

:%normal @x
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个解决方案,但是 il 会在缓冲区的每一行上执行宏,OP 只要求从光标到末尾。 (2认同)
  • @Porunga `:.,$norm @x` 可以工作(`.,$` 表示从当前行 `.` 到最后一行 `$`) (2认同)

Max*_*Kim 23

制作递归宏:

qa@aq
Run Code Online (Sandbox Code Playgroud)

例如:

qa0gUwj@aq
Run Code Online (Sandbox Code Playgroud)

它将使用单个@a UPCASE从当前行到文件末尾的第一个单词.但请确保"寄存器为空:

let @a=""
Run Code Online (Sandbox Code Playgroud)

  • 优秀.这种方法比`%:normal`方法更有用,因为它遵循宏中的任何线条移动,因此在线条形状不相同的情况下非常有用.我发现创建宏'a'以定义动作更容易,然后让宏'b'执行递归位,即qb @ a @ bq. (3认同)
  • 如果您的宏涉及搜索,请避免这种情况,因为它将从顶部继续.如果发生这种情况,请停止`ctrl-c`! (3认同)
  • @IainBallard,`:set nowrapscan`使其失败并在到达文件末尾时停止. (3认同)

Pet*_*ter 10

999999@x,除非你有一个非常大的缓冲区......

  • 为什么不只是`%:normal @ x`或`1,$:normal @ x`? (5认同)
  • 这绝对是更优雅的解决方案 - 我猜`99999 @ x`只是你匆忙时想出来的自然事物:) (3认同)
  • 除非您正好有 999999 行,否则 9999999@x 不会在最后一行运行多次吗? (2认同)
  • 刚试了一下.挂起会话.可能会继续运行它一百万次而不会停在线路末端. (2认同)