删除除行的第一个实例之外的所有实例

时间:2013-02-21 11:37:31

标签: vim windows-7

如何删除除行的第一个实例以外的所有实例?

例如,我有

LOADING CONDITION :   LIGHTSHIP CONDITION

其中一些通过文件的内容传播开来。我想只保留第一个靠近顶部的实例。

想点什么?

3 个答案:

答案 0 :(得分:7)

您可以将:global命令与范围结合使用。

:0/LOADING CONDITION/+,$g//d

说明:

  • [range]g/{pat}/{cmd}在给定行范围{cmd}内与{pat}匹配的每一行上运行命令[range]
  • 从第一行开始的
  • 0/LOADING CONDITION/找到模式LOADING CONDITION
  • 0/LOADING CONDITION/+1启动第一个实例下方的第1行
  • +1可以缩短为+,因为可以假设为1。
  • ,$范围的结尾将是文件中的最后一行,被称为$
  • g//使用上一个搜索模式。在这种情况下,范围
  • 的模式
  • :delete:d简称是用于删除行的ex命令

有关详细信息,请参阅

:h :g
:h :d
:h range

答案 1 :(得分:2)

gg (make cursor back to top)
/LOADING CONDITION :   LIGHTSHIP CONDITION (enter)
n
:.,$g//d   

答案 2 :(得分:1)

我的PatternsOnText plugin提供了一个命令(和其他相关命令),这使得这很简单:

:DeleteDuplicateLinesOf /^LOADING CONDITION :   LIGHTSHIP CONDITION$/