如何创建一个 vim 宏来重新排列行?

How can you create a vim macro that reorders lines?

让我们从正文开始

1 The
2 Quick
3 Brown
4 Fox
5 Jumps
6 Over
7 The
8 Lazy
9 Dog

然后假设您想用宏重复将第一行变成最后一行。即这是1运行

后的目标状态
1 Quick
2 Brown
3 Fox
4 Jumps
5 Over
6 The
7 Lazy
8 Dog
9 The

用例:我想应用一个较长的宏,其中包含“第一次”、“第二次快速”等词

天真的方法只工作一次: q11Gdd8Gpq

@1 <- 这有效

@1 <- 这中断了

重复时会中断。我已经尝试了其他避免 dd 的方法(例如,在第一行 d1j 上方创建一个新行,返回到第 8 行,粘贴,J 以连接行)。我尝试的所有操作在 运行 时都有效,但在此 运行.

期间某些东西正在改变宏缓冲区

如何制作一个可以 运行 多次执行此操作的宏?

此页有答案,https://vim.fandom.com/wiki/Moving_lines_up_or_down

在我的特定应用程序之外(感谢评论中的@Amadan)这是

q1:1m$<cr>q

对我来说,我在列表后面旋转列表中的项目,整个解决方案最终是

q1:1m8<cr>q

但是对于所述问题,$ 而不是行号是正确的。

这种情况不需要宏:常用的成语是

:global/^/move $