我正在使用/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
语句没有#
。
答案 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
就可以很容易地“退缩”。