从Drew Neil的精彩著作《 Practical Vim》中,我了解了可以使用:g
命令执行的操作。但是,我没有一个表情。
:g/{/ .+1,/}/-1 sort
这将按字母顺序对文件中括号之间的所有行进行排序。该命令的一般形式是
:global/{pattern}/[cmd]
,其中[cmd]
由[range] [cmd]
组成。我知道搜索模式是起点,因此:g/{/
很清楚。然后跟随范围.+1,/}/-1
,其中.
是当前行(即与模式{
匹配的每一行),+1
添加一行偏移量{{1} }将范围的开头与结尾分开,,
说“直到右括号”,/}/
减去一行仅匹配括号的内部内容。
我没有得到的是-1
部分。需要什么斜线?为什么不能只写/}/
?
编辑:
从Vimhelp 10.3开始,我现在知道}
是用于范围上限的搜索模式。这让我仍然对这里的第二个/}/
感到困惑。因此更新后的问题是:为什么在/
之前需要第二个/
?
答案 0 :(得分:3)
对于范围,总是需要/.../
来告诉Vim:这是一种模式,搜索下一个匹配项并将光标定位在该位置;那就是我要开始/结束范围的地方。如果您查看:help :range
,则不允许使用文字}
; Vim需要行号或代表该符号的符号,标记或搜索模式。向上搜索只能使用?...?
。
当您尝试建议的变体时,您会得到
E492: Not an editor command: .+1,}-1 sort
另一种激励方式是从具体的{
... }
分隔符中抽象出来。想象一下,如果您想在foo
... bar
内找到一个范围,该范围将如何。如果范围是000
... 999
,该怎么办? Vim将无法区分文字数范围(第999行)和搜索(包含999
的下一行)。