在vim中连接数字

时间:2013-09-23 14:07:49

标签: vim

我有一系列十六进制数字,如下面的colums所示。

cdef
89ab
4567
0123

我想将数字排在从最后一行开始的一行中,如下所示。

0123456789abcdef 。如何在不使用宏的情况下在vim中完成它?

3 个答案:

答案 0 :(得分:4)

命令

使用

反转行
:g/./m 0

加入所有行,!标志不插入或删除空格。

:%j!

解释

:global命令采用以下形式::g/{pat}/{cmd}。因此,在与模式{cmd}匹配的任一行上运行命令{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

答案 1 :(得分:1)

使用加入插件(https://github.com/sk1418/Join),您可以这样做:

:%J '' r

:J '' 4 r

r标志表示反向连接线

实现目标。它支持更多关于线连接的功能。检查出来..

和....那个脚本是我写的。 :P

答案 2 :(得分:1)

Kent的插件可以完成这项工作,如果您需要经常这样做,建议使用它;这是一个内置命令的(更长篇)替代方案:

首先,使用:move命令和:global来反转这些行。

:1,4g/^/m0

然后,在没有任何分隔符的情况下加入:

:1,4j!