如何删除除已知行的第一个实例之外的所有实例?
例如,我有
LOADING CONDITION : LIGHTSHIP CONDITION
其中一些分布在文件的内容中。我只想保留靠近顶部的第一个实例。
任何人的想法?
您可以将: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
gg (make cursor back to top)
/LOADING CONDITION : LIGHTSHIP CONDITION (enter)
n
:.,$g//d
我的PatternsOnText 插件提供了一个命令(和其他相关的),使这变得非常简单:
:DeleteDuplicateLinesOf /^LOADING CONDITION : LIGHTSHIP CONDITION$/