我想知道Gvim是否有某种方法可以通过“阻止”浏览搜索结果。 “块”在每一行中都有搜索模式。因此命令应该从第1行导航到第5行,n + 1,n + 4,依此类推。它应该忽略连续行(A块!)中发生的匹配并跳转到下一个块。如果有某种方法来定义“无图案块”的大小
Line 1: Pattern
Line 2: Pattern
Line 3: Pattern
Line 4:
Line 5: Pattern
---- No Pattern here ----
Line n+1: Pattern
Line n+2:
Line n+3:
Line n+4: Pattern
Line n+5: Pattern
答案 0 :(得分:0)
当然,我不记得vim是否具有进行多线匹配的能力。如果是,您可以在搜索模式中指定换行符。在Perl中,这看起来像这样(我在没有查找多行正则表达式的情况下快速推出了这个,所以我可能有一些语法错误,但它足够接近作为一个例子)。
/(pattern)(\n(pattern)*){4}/m
这将寻找'pattern',然后是4行,可能包含也可能不包含'pattern'。
这个问题是如果你有两个重叠的块,我认为这个搜索会混淆。
你可以做的另一件事是定义一个将搜索的vim宏,然后向下移动5行。
使用+ q +定义宏,然后使用+ @ +执行。因此,对于“搜索模式块”示例,使用“t”,您可以执行以下操作:
<esc>qt # start macro 't'
/pattern # search for 'pattern'
5j # move down 5 lines
<esc>q # end macro
然后,您将从文档顶部开始,反复按“@t”
答案 1 :(得分:0)
可以使用两种不同的策略来描述您对块的定义。 首先,可以设计搜索模式以匹配第一行 一个块,即与模式匹配但不跟随一条线的线 匹配相同的模式。
/\%(\1\n\)\@<!\(pattern\)
其次,可以搜索与模式匹配的几个后续行。 但要跳过整个块以便找到下一个匹配项,则需要它 将光标放在匹配的块的末尾。
/\(pattern\)\%(\n\1\)*/e
就个人而言,我更喜欢第一种解决方案。
答案 2 :(得分:0)
你可以为此折叠。
折叠包含最后搜索模式的连续行块:
:se fdm=expr foldenable foldexpr=getline(v:lnum)=~@/
现在您可以使用常规折叠导航
zj 向下移动一次, zk 向上移动一次
zcdd 将当前块拖入默认寄存器