我有一系列十六进制数字,如下所示。
cdef
89ab
4567
0123
我想从最后一行开始将数字排列在一行中,如下所示。
即0123456789abcdef。如何在不使用宏的情况下在 vim 中完成它?
我有一系列十六进制数字,如下所示。
cdef
89ab
4567
0123
我想从最后一行开始将数字排列在一行中,如下所示。
即0123456789abcdef。如何在不使用宏的情况下在 vim 中完成它?
命令
用反转线
:g/./m 0
加入所有行,!
标志不会插入或删除空格。
:%j!
说明
该:global
命令采用以下形式::g/{pat}/{cmd}
. {cmd}
因此,在与 pattern 匹配的任何行上运行命令{pat}
。在这种情况下,我们的模式.
匹配非空行。我们的命令是:move
。该:move {address}
命令会将整行移动到地址/行,{address}
. 在我们的例子中,我们将每一行移动到文件的顶部,所以我们使用0
.
所有这些:g/./m0
将占用每个非空行并将其移动到顶部。由于:global
命令从文件顶部运行到底部,因此第一行首先移动到顶部,最后一行最后移动到文件顶部。把这种想象成一个堆栈(LILO)。因此,线条是相反的。
现在剩下的就是将所有行连接在一起,没有任何额外的空白。该:join
命令采用:{range}join[!]
. 我们想从第一行 , 加入1
到最后一行$
, 所以我们的范围是1,$
。然而,这是非常常见的,所以这个范围有一个快捷方式,%
. 可选!
标志告诉:join
不要添加或删除任何空白。所有这些:%j!
将连接成一条长线。
作为旁注可能更常见的是通过反转线,:g/^/m0
因为^
模式匹配每一行而不仅仅是非空行。
如需更多帮助,请参阅:
:h :g
:h :m
:h :j
使用加入插件(https://github.com/sk1418/Join)你可以这样做:
:%J '' r
或者
:J '' 4 r
r
flag 表示反向连接线
实现目标。它支持更多关于线连接的功能。一探究竟..
还有....那个剧本是我写的。:P
Kent 的插件可以完成这项工作,如果您需要经常这样做,建议您使用;这是带有内置命令的(更冗长的)替代方案:
首先,使用:move
命令与:global
反转线。
:1,4g/^/m0
然后,不带任何分隔符加入:
:1,4j!