如何在vim中跳转到第一个未注释的语句?

时间:2013-02-03 05:33:56

标签: regex vim ide comments

我正在使用/print搜索我未注释的print语句,因为我想将它们评论出来。我知道我可以使用搜索和替换来首先删除所有注释,然后应用它们,但我只是想找到下一个未注释的打印语句,我无法解决如何操作。

E.g。我有:

    #print fooVal
        #... do stuff
        #print barF
        #... more stuff
            print gold # <-- I want to use vim to jump straight to this line 

我希望与此匹配,因此我不必循环遍历所有 print语句(甚至是已注释掉的语句),只是为了找到一个 print语句没有#

我已尝试使用:s/^\s+print/^print,但vim不喜欢它。另外,我看了here,但我找不到信息。

2 个答案:

答案 0 :(得分:2)

在您的情况下,打印前没有空格。因此,请尝试使用'*'而不是'+'。

这对我有用:/^\s*print

不太方便的模式应突出显示带有打印的未注释行:/^[^#]*\s*print

答案 1 :(得分:1)

在你的情况下,@ Taky的解决方案是我认为最好的,但我注意到了一些关于vim正则表达式的评论。我在最后几天研究了这个,所以也许把它写下来是个好主意。

在vimworld中使用例如*^$作为正则表达式特殊字符称为“魔术”(默认为set magic)。默认情况下,+不是正则表达式字符,必须用作\+来表示“regexp +”。但是,如果进行微小的更改,它也可能是“神奇的”,请阅读:vim help - search patterns(与vim编辑器中的相同,但是作为HTML,并且在顶部具有良好的搜索功能)。
另请参阅vim help - pattern

这是一个简短的指南(规则在列表中推翻):
设置
:set ignorecase忽略搜索和替换中的案例,
:set smartcase用于忽略大小写,只要不使用大写字母(ignorecase必须打开才能使其工作)。
:set magic能够将某些字符用作正则表达式特殊字符,例如*,不必在\之前。这是默认的(我认为)。

搜索模式中的规则(取代设置)
\c忽略大小写,\C区分大小写 用作例如/\cxxx表示“忽略大小写”,/\Cxxx表示区分大小写(\c与标记i相同,替换语法为s/xxx/yyy/i
\m使用“魔法”(与设置magic相同),\M没有“魔法”。

以下是有趣的部分,在vim模式中使用+
\v被描述为“非常神奇”,这就是我认为使用正则表达式时我们都习惯的。
\V“非常无畏”,ALL是字面的,只有\具有特殊含义。

现在, +可以像/\v\s+print一样直接使用(但对于您来说,最好在特定情况下使用*,{{1} }将找不到启动该行的“插件” 例如。如果+未被使用,{表达式也必须\

提示:在.vimrc中执行这些映射,以便始终在搜索模式中使用\v

\v

(当不需要时," To get 'normal' behavior for regexps (use "\V" to avoid) nnoremap / /\v vnoremap / /\v 就可以很容易地“退缩”。