Vim 删除除第一个实例外的所有行
如何删除已知行的第一个实例以外的所有实例 例如,我有Vim 删除除第一个实例外的所有行,vim,windows-7,Vim,Windows 7,如何删除已知行的第一个实例以外的所有实例 例如,我有 LOADING CONDITION : LIGHTSHIP CONDITION 其中有几个通过文件的内容传播开来。我只想保留第一个实例,它位于顶部附近 有人想知道吗?您可以将:global命令与范围结合使用 gg (make cursor back to top) /LOADING CONDITION : LIGHTSHIP CONDITION (enter) n :.,$g//d :0/LOADING CONDITION/
LOADING CONDITION : LIGHTSHIP CONDITION
其中有几个通过文件的内容传播开来。我只想保留第一个实例,它位于顶部附近
有人想知道吗?您可以将
:global
命令与范围结合使用
gg (make cursor back to top)
/LOADING CONDITION : LIGHTSHIP CONDITION (enter)
n
:.,$g//d
:0/LOADING CONDITION/+,$g//d
说明:
在给定行范围内与[range]g/{pat}/{cmd}
匹配的每一行上运行命令{pat}
{cmd}
从第一行开始查找模式0/加载条件/
加载条件
在第一个实例下方开始范围1行0/加载条件/+1
可以短接为+1
,因为可以假定为1+
范围的末尾将是文件中的最后一行,该行被引用为,$
$
使用最后一个搜索模式。在本例中,该范围内的图案g/
或简称:delete
是用于删除行的ex命令:d
:h :g
:h :d
:h range
My提供了一个命令(以及其他相关命令),使此操作非常简单:
:DeleteDuplicateLinesOf /^LOADING CONDITION : LIGHTSHIP CONDITION$/
我知道,我如何“按程序”做到这一点?所以我可以把它放在一个脚本文件中。我需要对272个文件执行此操作。它可以写在vim函数中。顺便问一下,那里有awk/sed吗?这很容易做到。@ldigas刚刚看到你对awk/grep的评论,sry。你还没有问过同样的问题吗?!可能与@IngoKarkat重复-是的,相似。在另一种情况下,我感兴趣的是删除所有重复多次的行的第一个实例。我事先不知道它的内容。我只想一份一份。在这种情况下,我想删除内容已知的行的第一个副本以外的所有副本。另外,我想在没有awk/grep/的情况下完成它。。。因为这些工具在Windows上通常不可用。@IngoKarkat ha,当我看到这个问题时,我觉得我以前回答过它,但不确定。。。您发现了这个链接……非常好的解释,并且巧妙地使用了
/{pattern}/
作为范围的一部分。