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