Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用负前瞻的Vim多行搜索_Vim - Fatal编程技术网

使用负前瞻的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