如何使Vim Ex命令模式范围从当前行开始搜索?
假设我有一个带有2个选择器的短CSS文件(下面的代码)如何使Vim Ex命令模式范围从当前行开始搜索?,vim,Vim,假设我有一个带有2个选择器的短CSS文件(下面的代码) .selector1 { margin: 0; padding: 2px 3px; background-color: #ffe0e0; } .selector2 { cursor: pointer; text-decoration: underline; } 我的目标是在下一个选择器中打印所有规则。光标位于文件的最开头(第1行的第1个字符)。所以我试着: :/\V{/+1,/\V}/-1 pri
.selector1 {
margin: 0;
padding: 2px 3px;
background-color: #ffe0e0;
}
.selector2 {
cursor: pointer;
text-decoration: underline;
}
我的目标是在下一个选择器中打印所有规则。光标位于文件的最开头(第1行的第1个字符)。所以我试着:
:/\V{/+1,/\V}/-1 print
我得到的是:给定的向后范围
我研究了这背后的原因,这是search/
命令在用作范围时开始查看当前行的下一行。因此,它找到的第一个{
在selector2
中,而找到的第一个}
仍在selector1
中。我认为这是因为Ex命令作用于行(而不是字符),而默认情况下,/
行为是开始查看下一个字符(在本例中为下一行)
对于selector2
,如果光标放在selector2
上一行,但selector1
在第一行,则命令将起作用,因此无法将光标行放在其上
实现目标的最简单方法是什么?从下一个选择器打印规则?即使光标位于第一行
有没有办法抑制/克服
/
在当前行的下一行开始搜索的默认行为 您只需要一个初步步骤:
:/}/;?{?+,-p
首先将光标移动到下一个右大括号(使用
/}/
),然后(;
)通过向后搜索(?{+
)和当前行上方的行(-
)构建范围。如果您的问题是如何使/foo/,/bar/
范围从当前行开始,您可以执行以下操作:
exec search("{")+1.';/\V}/-1 print'
search()
将从光标位置进行搜索
对于您的具体问题,您可以先搜索关闭}
,然后向后搜索{
:
/\V}/-1,?\V{?+1 print
根据不同的要求,将-1+1
调整为-n+n
或者这样做:
/{<cr>
vi{
:print
/{
六{
:打印
/
范围中的确实与包含图案的下一行匹配。From:h://
:
/{pattern}[/] the next line where {pattern} matches
但是,您可以将计数传递给/
,以指示从何处开始搜索。仍然可以从:help
:
The "/" and "?" may be preceded with another address. The search starts from there.
(...)
The {number} must be between 0 and the number of lines in the file.
(...)
Some commands interpret the zero as "before the first line" (:read, search pattern, etc).
在你的情况下,你可以使用
:0/\V{/+1,/\V}/-1 print
从“第一行之前”开始搜索(也匹配它)
匹配当前行的更通用方法是使用:。-/
,意思是:“当前行之前的行”(当当前行是第一行时也有效)。我认为-/
是最好的答案。