在vim中慢慢搜索群组

时间:2014-04-24 15:56:08

标签: regex performance search vim

当我在一次执行中搜索不同的字符串时,例如像<。p>

/\(yadda\|schmadda\)

工作正常。但与标准搜索/yadda相比,长文件的速度极慢。

有更快的方法吗?

4 个答案:

答案 0 :(得分:2)

通过/进行搜索的替代方法是使用:grepquickfix列表。使用%作为当前文件名的快捷方式。

:grep "yadda\\\|schmadda" %

然后通过:cnext:cprev浏览列表,或通过:copen在窗口中打开列表。我使用Unimpaired]q[q映射到:cnext:cprev

要获得更快的速度,尤其是跨多个文件,您可以将Vim设置为使用agack,而不是通过'grepprg'选项使用常规grep。例如:set grepprg=ag\ --nogroup\ --nocolor

如果您的系统没有grep,或者您更愿意使用Vim的风格正则表达式,则可以使用:vimgrep替代:grep。用法示例:

:vimgrep/\(yadda\|schmadda\)/ %

应该注意:vimgrep通常比:grep慢。

有关详细信息,请参阅以下内容:

:h :grep
:h quickfix
:h c_%
:h :cnext
:h :cope
:h 'grepprg'
:h :vimgrep

答案 1 :(得分:1)

Vim 7.4引入了一个新的基于NFA的正则表达式引擎。虽然通常认为这种情况更快,但可能会出现这种情况。

您可以尝试通过

切换到旧引擎
:set regexpengine=1

您还可以通过特殊的\%#=1原子选择模式中的引擎。

PS:长文件究竟是什么意思?线长,总体尺寸大?

答案 2 :(得分:1)

我想指出一些尚未提及的内容。将grep用于像你这样的用例时,这将是一个更好的工作流程:

:grep yadda %
:grepadd schmadda %

另请注意,还可以使用:lgrep:lgrepadd来代替:grep&amp; :grepadd使用位置列表(本地窗口)而不是quickfix列表(全局列表),尤其是在您只想在当前文件中搜索的情况下。

答案 3 :(得分:0)

我有同样的问题。在尝试找到解决方案后,我开始使用Ack.vim。 Ack.vim很快。