vim - 如何从 Vim 中交错行?
问题描述
给定一个包含偶数行的文件,如何将后半部分的行交错到前半部分?例如,从此:
a
b
c
1
2
3
对此:
a
1
b
2
c
3
一种可能的解决方案是将这些部分写入单独的文件,然后使用该paste
实用程序。
:1,3w a | 4,6w b
:%!paste -d \\n a b
但是,我想在 Vim 中找到一种简单的方法——使用本机命令。
解决方案
该:g
命令经常用于迭代行并执行某些命令。在这种情况下,它可以用于迭代文件后半部分的行,同时将行从前半部分移动到它们适当的相对位置:m
。
考虑到我们在后半部分的第一行上有光标,这一行必须在前半部分的第一行之前,所以我们可以将它移动到那里:1 m -1
(将第 1 行移动到位置 -1,相对于光标)。在此之后,第 1 行现在应该在下半场的第 2 行之前。因此,只需向下移动光标并重复此过程,由
:g
. 简而言之,先用50%and跳转到后半段的第一行,然后:
:,$g/^/1m-1
作为一个命令,它将整个块的范围交错(两半)或默认为整个文件:
command! -range=% Interleave execute 'keeppatterns'
\ (<line2>-<line1>+1)/2+<line1> ',' <line2>
\ 'g/^/<line1> move -1'
:Interleave
注意: :Interleave
用于 :keeppatterns
防止搜索寄存器和历史记录改变。:keeppatterns
需要 Vim 7.4.083+
推荐阅读
- qt - QML 多窗口应用程序结构化方法
- excel - 具有 2 个条件的 COUNTIF
- javascript - GitHub API CORS 政策
- swift - Core Data 派生属性在首次使用时未正确计算?
- java - 如何重构大型 if-else Web 服务调度程序
- java - 弹性搜索结果到 POJO
- linux - 在 Linux 的 Db2 CLP 中使用箭头键?
- css - 当我显示 Div 时,为什么父级会变为 Width=100%?
- asp.net-core - .net 核心中的 SAML 令牌身份验证和 ws 馈送
- mysql - CSV 导入 AWS Aurora MySQL(5.6) 并使用 DataGrip 断开连接