【发布时间】:2019-11-17 10:00:00
【问题描述】:
由于某种原因,当我在 vim 中插入换行符时(使用 o 键或回车键),vim 实际插入新行需要相当长的时间。 当我按住 enter 键时,这个问题会更加严重——在这种情况下,vim 完全冻结,并且需要大约 3-4 秒来呈现所有新行。 这个问题似乎是 Python 文件特有的,因为我已经用其他大型非 Python 文件测试过这种行为,但没有看到这个问题。
一些减速是由 vim-polyglot 语言包引起的,但禁用该插件只会稍微帮助减速,而不是完全消除它。
使用vim -u NORC 打开文件也没有多大帮助,我最终能够顺利插入换行符的唯一方法是使用vim -u NONE 或syntax off,这让我相信这是语法高亮问题。
这是只需按住 Enter 键几秒钟的同步时间报告(-u NORC:
TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN
0.467286 11548 0 0.000109 0.000040 pythonMatrixMultiply ^\s*\%(\%(>>>\|\.\.\.\)\s\+\)\=\zs\%(\h\|\%(\h\|[[(]\).\{-}\%(\w\|[])]\)\)\s*\n\%(\s*\.\.\.\s\)\=\s\+@\%(.\{-}\n\%(\s*\.\.\.\s\)\=\s\+@\)*
0.404281 12396 968 0.000109 0.000033 pythonNumber \%(^\|\W\)\zs\d*\.\d\+\%([eE][+-]\=\d\+\)\=[jJ]\=\>
0.376318 11548 0 0.000085 0.000033 pythonString [uU]\=\z('''\|"""\)
0.340580 11548 0 0.000222 0.000029 pythonMatrixMultiply \%(\w\|[])]\)\s*@
0.263625 14333 5095 0.000063 0.000018 pythonString [uU]\=\z(['"]\)
0.250727 11548 0 0.000058 0.000022 pythonRawString [uU]\=[rR]\z('''\|"""\)
0.241550 11548 0 0.000061 0.000021 pythonRawString [uU]\=[rR]\z(['"]\)
0.229741 21954 13645 0.000047 0.000010 pythonNumber \<\%([1-9]\d*\|0\)[Ll]\=\>
0.228875 11548 0 0.000392 0.000020 pythonNumber \<\d\+\.\%([eE][+-]\=\d\+\)\=[jJ]\=\%(\W\|$\)\@=
0.202706 11548 0 0.000050 0.000018 pythonMatrixMultiply [^\\]\\\s*\n\%(\s*\.\.\.\s\)\=\s\+@
0.175705 11548 0 0.000040 0.000015 pythonNumber \<\d\+[eE][+-]\=\d\+[jJ]\=\>
0.171692 11548 0 0.000047 0.000015 pythonNumber \<\d\+[jJ]\>
0.059275 24104 16355 0.000032 0.000002 pythonAttribute \.\h\w*
0.047092 11660 2977 0.000035 0.000004 pythonComment #.*$
0.021249 4826 4826 0.000020 0.000004 pythonString \z1
0.008962 11548 0 0.000015 0.000001 pythonNumber \<0[xX]\x\+[Ll]\=\>
0.008958 11548 0 0.000015 0.000001 pythonNumber \<0[oO]\=\o\+[Ll]\=\>
0.008755 11548 0 0.000004 0.000001 pythonNumber \<0[bB][01]\+[Ll]\=\>
0.004358 11548 952 0.000016 0.000000 pythonEscape \\$
0.003670 11484 0 0.000017 0.000000 pythonDecoratorName @\s*\h\%(\w\|\.\)*
0.001265 4760 0 0.000001 0.000000 pythonEscape \\N{\a\+\%(\s\a\+\)*}
0.001153 4826 0 0.000001 0.000000 pythonString \\\\\|\\\z1
0.001129 4760 0 0.000001 0.000000 pythonEscape \%(\\u\x\{4}\|\\U\x\{8}\)
0.001116 4760 0 0.000001 0.000000 pythonEscape \\[abfnrtv'"\\]
0.001098 4760 0 0.000001 0.000000 pythonEscape \\\o\{1,3}
0.001072 4760 0 0.000001 0.000000 pythonEscape \\x\x\{2}
0.000749 3104 0 0.000001 0.000000 pythonDecorator @
0.000700 3119 0 0.000001 0.000000 pythonDoctestValue ^\s*\%(>>>\s\|\.\.\.\s\|"""\|'''\)\@!\S\+
0.000601 3119 0 0.000010 0.000000 pythonDoctest ^\s*>>>\s
0.000068 62 0 0.000007 0.000001 pythonSync ^\%(def\|class\)\s\+\h\w*\s*[(:]
3.524359 288911
我不完全确定为什么有这么多正则表达式被匹配,因为我唯一要做的就是插入新行。此外,大多数这些正则表达式,例如 pythonMatrixMultiply,甚至都不匹配任何东西。 任何帮助,将不胜感激。 作为参考,这是我的 vim 和 neovim 版本(我主要使用 neovim,但这个问题也发生在 vim 中)。
NVIM v0.3.1
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Jun 07 2019 11:40:34)
【问题讨论】: