使用负前瞻的Vim多行搜索
我试图在日志中搜索以下模式使用负前瞻的Vim多行搜索,vim,Vim,我试图在日志中搜索以下模式 [write_<many other characters here till end of line> <10-15 lines here> <more characters> 10008 这是在距离最近的[write_uu]到10008的前面的一些行中匹配[write_u]。这就是为什么尝试使用负前瞻性过滤此类虚假匹配的原因 /\[write_\_.\{-}10008\([write_\)\@! 这对我也不起作用。我哪里出了
[write_<many other characters here till end of line>
<10-15 lines here>
<more characters> 10008
这是在距离最近的[write_uu]到10008的前面的一些行中匹配[write_u]。这就是为什么尝试使用负前瞻性过滤此类虚假匹配的原因
/\[write_\_.\{-}10008\([write_\)\@!
这对我也不起作用。我哪里出了问题,或者我的思路完全错了?谢谢你的帮助。我想这就是你要找的:
/\v\[write_(\_.(\[write_)@!){-}10008
您将负面展望放在了错误的位置。谢谢您的回复。我尝试了此操作,但得到的结果是“E363:pattern使用的内存比'maxmempattern'多”。我不明白这意味着什么。请您帮助正确设置此值。如果Kent的模式出现
E363
错误,则您的文件可能包含大的部分(大约超过1000行),而没有任何(我想是写
头;(我想更正它,但很抱歉,我找不到正确的模式..)@thorondor1990我用一些例子进行了测试,它是有效的。但是我不知道你的真实文件看起来如何。如果你有E363
,请尝试:set maxmempattern=A_BIG\u NUMBER
在将maxmempattern设置为1000000后尝试了这个方法。gvim在执行命令后挂起了大约15分钟,后来出现了相同的错误。可能是因为他使用了巨大的日志和大量的行来覆盖2个[write_u]模式。无论如何,我用一个较小的示例进行了检查,@Kent的解决方案确实有效。谢谢Kent和yolenoyer@thorondor1990我不知道你想对这些匹配做什么,只是一个提示,你可以先搜索10008,然后向后搜索[写入
以定位块,然后在块上执行任何操作。您可以使用宏执行此操作。
/\v\[write_(\_.(\[write_)@!){-}10008