如何让Vim Ex命令模式范围从当前行开始搜索?

时间:2015-12-28 15:24:37

标签: vim

假设我有一个包含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在第一行上,那么该命令将起作用,因此将光标线放在它上面是不可能的

实现目标的最简单方法是什么 - 从下一个选择器打印规则?,即使光标位于第一行。

有没有办法以某种方式压制/克服/在下一行开始搜索到当前搜索的默认行为?

3 个答案:

答案 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; (当前行是第一行时也有效。)