我想知道是否可以使用Python在Vim中进行搜索,以加速长文档中的搜索。你知道吗
我有一个140.000行的文本文档。
我有一个包含115种不同搜索模式的列表(mysearch)。
我想把所有匹配的行放在一个列表中(点击)
我现在就是这么做的:
for i in range(0,len(mysearches)-1)
for line in range(1, line("$"))
let idx = match(getline(line), mysearches[i])
if idx >= 0
call add(hits, line)
endif
endfor
endfor
“删除双行号:
let unduplist=filter(copy(hits), 'index(hits, v:val, v:key+1)==-1')
问题是此搜索需要5分钟以上。
如何使上述搜索适应python搜索?你知道吗
这个怎么样:
这是通过
\|
(例如,或剥离所有不同的模式)、剥离并使用grep
来处理模式来实现的。Grep应该非常快,比vim快得多,而且可能比python甚至perl都快(当然这取决于模式)。 返回值是一个包含所有匹配行的列表。因为我们使用grep的-n
开关,所以我们收到了匹配的行号,这些行号又被cut
切掉了。你知道吗systemlist()
然后包含在\n
处的输出分割。因此mylist应该包含与您的模式匹配的所有行。这当然取决于您的模式,但是如果您使用标准的BRE或ERE(-E)甚至perl-RE(-P开关),您应该可以。根据所需的味道,需要调整连接部分。你知道吗请注意,这基本上是未经测试的,对于一个真正健壮的解决方案,可能会添加更多的错误处理(可能是模式的预处理),并将整个部分拆分一点,以便更易于阅读。你知道吗
确实是个问题。你知道吗
您可以这样使用
:vimgrep
命令:我刚刚测试了我正在处理的4017行长的
.less
文件的内容,将34次内容粘贴到一个新的136579行长的文件和一个只有13次搜索的列表中:花了3秒钟找到47634条匹配行,这些匹配行现在方便地列在quickfix窗口中。你知道吗
当然是YMMV,因为当你向
mysearches
添加项目并使其复杂化时,搜索会花费更多的时间,但我相当肯定你能够轻松地击败当前的时机。你知道吗您也可以使用
:grep
:相关问题 更多 >
编程相关推荐