这个格式错误的命令实际上发生了什么?
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
,它会删除前两行,并保持这样的输出。
: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
,它会删除前两行,并保持这样的输出。