Regex vim中的慢速搜索组
当我在一次执行中搜索不同的字符串时,例如Regex vim中的慢速搜索组,regex,performance,search,vim,Regex,Performance,Search,Vim,当我在一次执行中搜索不同的字符串时,例如 /\(yadda\|schmadda\) 很好。但与标准搜索(如/yadda)相比,这对于长文件来说速度非常慢 有更快的方法吗?Vim 7.4引入了一个新的、基于NFA的正则表达式引擎。虽然这通常被认为是更快的,但也有一些情况不是这样的 您可以尝试通过以下方式切换到旧发动机: :set regexpengine=1 您还可以通过特殊的\%\35;=1原子选择模式内部的引擎 PS:长文件到底意味着什么?长行长,整体尺寸大?Vim 7.4引入了一个新的基
/\(yadda\|schmadda\)
很好。但与标准搜索(如/yadda
)相比,这对于长文件来说速度非常慢
有更快的方法吗?Vim 7.4引入了一个新的、基于NFA的正则表达式引擎。虽然这通常被认为是更快的,但也有一些情况不是这样的 您可以尝试通过以下方式切换到旧发动机:
:set regexpengine=1
您还可以通过特殊的\%\35;=1
原子选择模式内部的引擎
PS:长文件到底意味着什么?长行长,整体尺寸大?Vim 7.4引入了一个新的基于NFA的正则表达式引擎。虽然这通常被认为是更快的,但也有一些情况不是这样的 您可以尝试通过以下方式切换到旧发动机:
:set regexpengine=1
您还可以通过特殊的\%\35;=1
原子选择模式内部的引擎
PS:长文件到底意味着什么?行长,整体尺寸大?通过
/
搜索的替代方法是使用:grep
和快速修复列表。使用%
作为当前文件名的快捷方式
:grep "yadda\\\|schmadda" %
然后通过:cnext
和:cprev
浏览列表,或通过:copen
在窗口中打开列表。我使用哪个映射将]q
和[q
映射到:cnext
和:cprev
为了提高速度,特别是跨多个文件,您可以通过'grepprg'
选项将Vim设置为使用或代替常规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
通过/
进行搜索的另一种方法是使用:grep
和quickfix
列表。使用%
作为当前文件名的快捷方式
:grep "yadda\\\|schmadda" %
然后通过:cnext
和:cprev
浏览列表,或者通过:copen
在窗口中打开列表。我使用哪个映射将]q
和[q
映射到:cnext
和:cprev
为了提高速度,特别是跨多个文件,您可以通过'grepprg'
选项将Vim设置为使用或代替常规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
我想指出一些尚未提及的问题。在将grep用于像您这样的用例时,这将是一个更好的工作流:
:grep yadda %
:grepadd schmadda %
还要注意的是,还有:lgrep
和:lgrepadd
可以用来代替:grep
和:grepadd
使用位置列表(窗口本地)代替快速修复列表(全局列表),尤其是在您只想在当前文件中搜索的情况下。我想指出一些尚未提及的内容。在将grep用于像您这样的用例时,这将是一个更好的工作流:
:grep yadda %
:grepadd schmadda %
还要注意的是,还有:lgrep
和:lgrepadd
可以用来代替:grep
和:grepadd
使用位置列表(窗口本地)代替快速修复列表(全局列表),尤其是在您只想在当前文件中搜索的情况下。我也有同样的问题。我是在尝试找到解决方案后开始使用的。Ack.vim很快。我也有同样的问题。我是在尝试找到解决方案后开始使用的。Ack.vim很快。您可以这样做,但我想查看有关搜索模式的文件.我知道这在grep中也是可能的…你可以这样做,但我想看看搜索模式周围的文件。我知道在grep中也是可能的…忘了提一下,我使用的是vim 7.0。长文件意味着250k行,66MB(二进制).OMG;您为什么要使用2006年发布的、非常过时的编辑器。应该可以安装最新版本7.4;如果您找不到适合您的发行版的软件包(对于Windows,请从中检查二进制文件,也不太难(例如,从Mercurial源代码中)在Linux上。忘了提一下,我使用的是vim 7.0。长文件意味着250k行,66MB(二进制)。OMG;为什么要使用2006年发布的、非常过时的编辑器。如果找不到合适的发行版包,应该可以安装最新的7.4版(对于Windows,检查来自的二进制文件,在Linux上(例如来自Mercurial源代码)也不是很困难。使用您给出的语法,我得到了错误:/bin/bash:-c:line 0:syntax error near unexpected token
('/bin/bash:-c:line 0:grep-n)(outlet 2>&1|tee/tmp/v369365/2’shell返回2
需要引用搜索词并转义
(以及在grep使用\\\code>时再次转义)。我已经更新了答案。你可以想象这个命令在命令行上使用grep
进行镜像,因此会有类似的转义需求。它可以工作,添加选项--binary files=text
可以将其用于我的大二进制文件。不过,我想人们需要习惯这种搜索方式。跳到列表并不是一个好办法它只需按一下n
。尽管如此,thx@Peter!我不能推荐足够的映射:cnext
/:cprev
。如我在回答中所述,我使用了Tim Pope未损坏的插件。我还添加了一点关于使用的内容