擅长:python、mysql、java
<p>这个怎么样:</p>
<pre><code>let pattern=join(mysearches, '\|')
let mylist = systemlist('grep -n "'.pattern.'" '. shellescape(fnamemodify(@%, ':p')). ' | cut -d: -f1')
</code></pre>
<p>这是通过<code>\|</code>(例如,<strong>或</strong>剥离所有不同的模式)、剥离并使用<code>grep</code>来处理模式来实现的。Grep应该非常快,比vim快得多,而且可能比python甚至perl都快(当然这取决于模式)。
返回值是一个包含所有匹配行的列表。因为我们使用grep的<code>-n</code>开关,所以我们收到了匹配的行号,这些行号又被<code>cut</code>切掉了。你知道吗</p>
<p><code>systemlist()</code>然后包含在<code>\n</code>处的输出分割。因此mylist应该包含与您的模式匹配的所有行。这当然取决于您的模式,但是如果您使用标准的BRE或ERE(-E)甚至perl-RE(-P开关),您应该可以。根据所需的味道,需要调整连接部分。你知道吗</p>
<p>请注意,这基本上是未经测试的,对于一个真正健壮的解决方案,可能会添加更多的错误处理(可能是模式的预处理),并将整个部分拆分一点,以便更易于阅读。你知道吗</p>