如何创建一个 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 $
让我们从正文开始
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 $