这个格式错误的命令实际上发生了什么?

What is actually happening with this malformed command?

中的问题原来是命令 :2,$/^userid/d 中缺少 g。但是该命令仍将运行,将其转换为:

userid  firstname       surname cardnumber
billy   william         smith   472750  
userid  firstname       surname cardnumber
steve   bubba           gump    472751
userid  firstname       surname cardnumber
george  Gigi            Jones   989989

为此:

userid  firstname       surname cardnumber
steve   bubba           gump    472751
userid  firstname       surname cardnumber
george  Gigi            Jones   989989

任何人都可以解释格式错误的命令实际上在做什么吗?

你问的是 lineSpecifier/pattern/ 做什么。您的范围表达式从 2 (line2) 开始,以 $/userid/ 结束。

如果你:h :range(感谢@Ingo 找到它),你可以找到:

The "/" and "?" may be preceded with another address. The search starts from there.

lineSpecifier/pattern/ 将从 lineSpecifier 行搜索 /pattern/。例如。 $/userid/ 将从行尾搜索 /userid/。另外4/userid/会从4行开始搜索/userid/,即执行后光标在line 5。所以 $/userid/ 会将光标定位在行 1,这可以通过 :$/userid/.

进行测试

所以你的命令与2,1d相同,这就是为什么vim要求你确认向后范围。如果你按下 y,它会删除前两行,并保持这样的输出。