Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/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
Regex vim中的慢速搜索组_Regex_Performance_Search_Vim - Fatal编程技术网

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未损坏的插件。我还添加了一点关于使用的内容