3

如何删除除已知行的第一个实例之外的所有实例?

例如,我有

LOADING CONDITION :   LIGHTSHIP CONDITION

其中一些分布在文件的内容中。我只想保留靠近顶部的第一个实例。

任何人的想法?

4

3 回答 3

8

您可以将: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
于 2013-02-21T14:52:44.897 回答
2
gg (make cursor back to top)
/LOADING CONDITION :   LIGHTSHIP CONDITION (enter)
n
:.,$g//d   
于 2013-02-21T11:55:42.330 回答
1

我的PatternsOnText 插件提供了一个命令(和其他相关的),使这变得非常简单:

:DeleteDuplicateLinesOf /^LOADING CONDITION :   LIGHTSHIP CONDITION$/
于 2013-05-29T15:51:35.183 回答