Vim: Backwards range — OK to swap中的问题在命令g
中失踪:2,$/^userid/d
。但是命令仍会运行,转换为:
userid firstname surname cardnumber
billy william smith 472750
userid firstname surname cardnumber
steve bubba gump 472751
userid firstname surname cardnumber
george Gigi Jones 989989
To This:
userid firstname surname cardnumber
steve bubba gump 472751
userid firstname surname cardnumber
george Gigi Jones 989989
任何人都可以解释格式错误的命令实际上在做什么吗?
答案 0 :(得分:3)
您在问lineSpecifier/pattern/
做了什么。您的范围表达式以2 (line2)
开头,以$/userid/
结尾。
如果您:h :range
(感谢@Ingo查找),您可以找到:
“/”和“?”可以在另一个地址之前。搜索从那里开始。
lineSpecifier/pattern/
将从/pattern/
行搜索lineSpecifier
。例如。 $/userid/
将从广告末尾搜索/userid/
。此外,4/userid/
将从行/userid/
搜索4
,也就是说,在执行后,光标位于line 5
。因此$/userid/
会将光标放在第1
行,这可以通过:$/userid/
进行测试。
因此您的命令与2,1d
相同,这就是为什么vim会向您询问向后范围的确认。如果您按下y
,它将删除前两行,并保留输出。