Vim:向后范围--可以交换

Vim:向后范围--可以交换,vim,Vim,我有一个文件,其中包含来自不同查询的大量SQL输出——包括来自每个查询的头 前 撇开我可以关闭标题的事实不谈 假设我想保留头的第一个实例并删除所有其他实例: 在vim中: :2,$/^userid/d 所以——从第2行开始,到最后一行结束——删除所有以userid开头的行。似乎合乎逻辑——我可以使用:g[而且它可以工作],但如果我尝试以下范围,我会得到以下消息: 给定向后范围,是否可以交换(是/否) 我缺少什么?:g需要一个范围,因此我认为正确的命令应该是:2,$g/^userid/d 不完全

我有一个文件,其中包含来自不同查询的大量SQL输出——包括来自每个查询的头

撇开我可以关闭标题的事实不谈

假设我想保留头的第一个实例并删除所有其他实例:

在vim中:

:2,$/^userid/d
所以——从第2行开始,到最后一行结束——删除所有以userid开头的行。似乎合乎逻辑——我可以使用
:g
[而且它可以工作],但如果我尝试以下范围,我会得到以下消息:

给定向后范围,是否可以交换(是/否)


我缺少什么?

:g
需要一个范围,因此我认为正确的命令应该是
:2,$g/^userid/d

不完全确定没有
g
会发生什么,但是当我测试它时,它似乎并没有做你想要的事情

以下是文档对任何情况下的错误的说明(
:h493


我应该仔细看一下
:g
…没有看到!谢谢,效果很好。有关
:2,$/^userid/d
实际作用的解释,请参阅。相关:
:2,$/^userid/d
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.