Vim-在Python中插入换行符非常慢

时间:2019-07-07 19:44:58

标签: vim neovim

由于某种原因,当我在vim中插入换行符(使用o键或Enter键)时,vim会花费大量时间才能实际插入新行。 当我按住回车键时,这个问题变得更加严重-在这种情况下,vim完全死机了,大约需要3-4秒才能呈现所有新行。 这个问题似乎是特定于Python文件的,因为我已经使用其他大型非Python文件测试了此行为,并且没有看到此问题。

某些减慢是由vim-polyglot语言包引起的,但是禁用该插件只会帮助减慢一点,而不能完全消除。 使用vim -u NORC打开文件也无济于事,而我最终能够顺利插入换行符的唯一方法是使用vim -u NONEsyntax 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)

1 个答案:

答案 0 :(得分:0)

由于-u NORC使插件可用,而-u NONE则关闭了所有功能,因此似乎插件引起了您的问题。进一步的侦探工作将涉及逐步添加回插件,直到您发现罪魁祸首为止。

在Neovim的上下文中,您还可以运行:checkhealth,有时可能会显示Python2和Python3提供程序的问题。

最后,您可能还会发现this answer about Vim profiling有用。