ruby - 在 Vim 中禁用特定的 Ruby 正则表达式模式匹配以提高性能

标签 ruby regex vim syntax symbols

我正在使用 vanilla Vim 并且 syntime 报告了以下代价高昂的模式:

 TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN
  3.526224   3751   1542    0.036641    0.000940  rubySymbol         []})\"':]\@<!\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:\s\@=
  1.278366   3465   1254    0.012201    0.000369  rubySymbol         \%([{(,]\_s*\)\@<=\l\w*[!?]\=::\@!
  0.730820   2211   0       0.008430    0.000331  rubyPredefinedConstant \%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!
  0.626906   2211   0       0.006168    0.000284  rubyPredefinedConstant \%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!
  0.515706   2211   0       0.004109    0.000233  rubyPredefinedConstant \%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\)\>\%(\s*(\)\@!
  0.337235   2211   0       0.007179    0.000153  rubyPredefinedConstant \%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_\%(VERSION\|RELEASE_DATE\|PLATFORM\|PATCHLEVEL\|REVISION\|DESCRIPTION\|COPYRIGHT\|E
NGI

我在哪里可以禁止搜索其中的一项或多项?如果可能,我不想安装任何插件。

更新:为了进一步说明,上面的同步时间数字不是特定的,我在 ~1200 行的 .rb 文件中遇到了这个问题。不管这个文件是否太长,在 vim 中插入一个新的空行这样的任务都非常缓慢(在视觉响应之前几秒钟)。将它与具有相同文件的 Rubymine 进行比较,没有注意到任何延迟,我希望有一个解决方案可以在 vim 下提高这种性能。完全禁用语法突出显示会使一切变得非常活泼,但更难阅读。

最佳答案

将以下内容放入文件 ~/.vim/after/syntax/ruby.vim:

syntax clear rubySymbol

after 目录将确保在获取原始 $VIMRUNTIME/syntax/ruby.vim 之后调用它,并且该命令会删除慢速语法定义。

注意这可能会干扰语法插件的运行;您可能会看到错误的突出显示,甚至可能会完全搞乱解析!

另一种方法是禁用当前文件的语法 (:setlocal syntax=),或完全禁用语法 (:syntax off)。

关于ruby - 在 Vim 中禁用特定的 Ruby 正则表达式模式匹配以提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30407064/

相关文章:

python - 如何使用正则表达式从文本中构建 python 列表?

vim - 如何在 Vim 中键入 <C-x><C-o>?

vim - 如何在 VIM 中执行基于文件扩展名的操作?

ruby-on-rails - 在Redmine中测试

ruby - 使用流在 sinatra 中转发文件下载

Ruby 继承和要求顺序

regex - 如何测试一个字符串是否是正则表达式任何实例的子字符串?

javascript - 用于 RoR 的 Lightbox/Facebox Gem

c - 正则表达式来验证C中的HTTP请求字符串?

vim - 如何在Vim中插入没有路径的文件名