VIM:如何搜索不包含特定字符的行?

3

我有一些来自ldiff文件的这样的行:

dn: cn=dkalland_directs_ww,cn=org_groups,cn=beehive_groups,cn=groups,dc=oracle
,dc=com
businesscategory: open
cn: dkalland_directs_ww
description: Directs Group for daniel.kallander@oracle.com
displayname: dkalland_directs_ww
mail: dkalland_directs_ww@oracle.com
objectclass: top
objectclass: orclGroup
objectclass: groupOfUniqueNames
orclglobalid: modified
orclnormdn: cn=dkalland_directs_ww,cn=org_groups,cn=beehive_groups,cn=groups,d
c=oracle,dc=com
owner: cn=BHGRPADMIN_WW,L=AMER,DC=ORACLE,DC=COM
uniquemember: cn=mattias_tobiasson,dc=us,dc=oracle,dc=com
uniquemember: cn=mattias_joelson,dc=us,dc=oracle,dc=com
uniquemember: cn=markus_persson,dc=us,dc=oracle,dc=com 
...

现在有一些行是前一行的延续,我想将它们与相应的行合并。
我困惑的是如何搜索没有“:”字符的行,以便将其与前一行合并。
请帮忙。
2个回答

11

我相信你想做一个

:v/:/-1j

v 命令选取所有不匹配模式 /:/ 的行,-1 选取上面的一行,并使用 j 命令将此行与下一行(即使用 v 命令选择的行)合并。

编辑 Benoit 和 dash-tom-bang 在评论中提供了重要改进:由于默认值为 1,因此不需要它,而 ! 不会在行之间添加空格。因此,以下是更好的版本:

:v/:/-j!

4
请注意,“1”不是必需的:“:v/:/-j”也可以使用。当使用范围的“+”和“-”一元运算符时,“1”是默认计数。 - Benoit
1
我也会在结尾加上一个 !,这样你就不会在连接点添加或删除空格了(即 :v/:/-j!)。 - dash-tom-bang
事实上,使用此方法,我不需要担心宏和需要运行它的次数... :D - Arindam Paul

4

模式

^[^:]*$

匹配不包含:的行,这在更常见的任务中非常有用,当:v命令不适用时(例如宏或脚本中的某些比较)。


使用上述方法(使用:v),我甚至不需要担心宏及其计数 :) - Arindam Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接