由于某种原因,当我在vim中插入换行符(使用o键或Enter键)时,vim会花费大量时间才能实际插入新行。 当我按住回车键时,这个问题变得更加严重-在这种情况下,vim完全死机了,大约需要3-4秒才能呈现所有新行。 这个问题似乎是特定于Python文件的,因为我已经使用其他大型非Python文件测试了此行为,并且没有看到此问题。
某些减慢是由vim-polyglot语言包引起的,但是禁用该插件只会帮助减慢一点,而不能完全消除。
使用vim -u NORC
打开文件也无济于事,而我最终能够顺利插入换行符的唯一方法是使用vim -u NONE
或syntax off
,这使我相信这是一个语法突出显示问题。
这是syntime报告,仅按住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)
答案 0 :(得分:0)
由于-u NORC
使插件可用,而-u NONE
则关闭了所有功能,因此似乎插件引起了您的问题。进一步的侦探工作将涉及逐步添加回插件,直到您发现罪魁祸首为止。
在Neovim的上下文中,您还可以运行:checkhealth
,有时可能会显示Python2和Python3提供程序的问题。
最后,您可能还会发现this answer about Vim profiling有用。