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

Disable specific Ruby regex pattern matching in Vim for performance

我正在使用 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)。