我有一个包含来自不同查询的大量SQL输出的文件 - 包括来自每个查询的标题。
实施例
userid firstname surname cardnumber
billy william smith 472750
userid firstname surname cardnumber
steve bubba gump 472751
userid firstname surname cardnumber
george Gigi Jones 989989
撇开我可以关闭标题的事实......
假设我想保留标头的第一个实例并删除所有其他实例:
在vim中:
:2,$/^userid/d
所以 - 从第2行开始,到最后一行结束 - 删除所有以userid开头的行。似乎逻辑 - 我可以使用:g
[并且它可以工作],但如果我尝试范围,我会收到此消息:
给出向后范围,可以交换(y / n)?
我错过了什么?
答案 0 :(得分:2)
:g
需要一个范围,因此我认为正确使用的命令是:2,$g/^userid/d
。
不完全确定在没有g
的情况下发生了什么,但在测试时它似乎没有做你想做的事。
以下是文档对错误的评论(:h 493
)
Reverse Range *E493*
A range should have the lower line number first. If this is not the case, Vim
will ask you if it should swap the line numbers.
Backwards range given, OK to swap ~
This is not done within the global command ":g".
You can use ":silent" before a command to avoid the question, the range will
always be swapped then.