假设我有一个包含2个选择器的简短CSS文件(下面的代码)。
.selector1 {
margin: 0;
padding: 2px 3px;
background-color: #ffe0e0;
}
.selector2 {
cursor: pointer;
text-decoration: underline;
}
我的目标是在下一个选择器中打印所有规则。光标位于文件的最开头(第1行的第1个字符)。所以我试试:
:/\V{/+1,/\V}/-1 print
我得到的是:Backward range given
。
我研究了背后的原因,当用作范围时,搜索/
命令开始查看当前范围的下一行。因此,它找到的第一个{
位于selector2
,而它找到的第一个}
仍位于selector1
。我假设它是因为Ex命令作用于行(而不是字符),而默认情况下/
行为是开始查看下一个字符(在本例中是下一行)。
对于selector2
,如果光标在selector2
上放置一行,但是selector1
在第一行上,那么该命令将起作用,因此将光标线放在它上面是不可能的
实现目标的最简单方法是什么 - 从下一个选择器打印规则?,即使光标位于第一行。
有没有办法以某种方式压制/克服/
在下一行开始搜索到当前搜索的默认行为?
答案 0 :(得分:1)
您只需要一个初步步骤:
;
首先将光标移动到下一个右括号(使用?{?+
)然后(-
)使用向后搜索(.webgrid-footer td {
padding: 0px;
}
)和上面的行构建您的范围当前行(vendor/magento/module-catalog/i18n/en_US.csv
)。
答案 1 :(得分:1)
如果您的问题是如何从当前行开始/foo/,/bar/
范围,您可以执行以下操作:
exec search("{")+1.';/\V}/-1 print'
search()
将从光标位置搜索。
针对您的具体问题,您可以先搜索结束}
,然后向后搜索{
:
/\V}/-1,?\V{?+1 print
根据不同的要求将-1 +1
调整为-n +n
。
或者这样做:
/{<cr>
vi{
:print
答案 2 :(得分:1)
/
确实与包含该模式的下一行匹配。来自:h :/
:
/{pattern}[/] the next line where {pattern} matches
但是,您可以将count
传递给/
,以指明从哪里开始搜索。仍然来自: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
从#34;开始在第一行&#34;之前开始搜索,也就是匹配它。
匹配当前行的更一般方法是:.-/<pattern>
,意思是:&#34;当前行之前的行&#34; (当前行是第一行时也有效。)