Vim中的问题:向后范围 — 可以交换原来是命令: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找到它),你可以找到:
"/"和"?"前面可能带有另一个地址。 搜索从那里开始。
lineSpecifier/pattern/
将从lineSpecifier
行中搜索/pattern/
。 例如 $/userid/
将从行尾搜索/userid/
。此外,4/userid/
将从第 4
行搜索/userid/
,即执行后,光标位于 line 5
处。所以$/userid/
会在第 1
行做光标,这可以通过:$/userid/
进行测试。
所以你的命令和2,1d
一样,这就是为什么 Vim 要求你确认向后范围。如果你按 y
,它将删除前两行,并保留输出。