Vim - Вставка новых строк в Python чрезвычайно медленная - PullRequest
0 голосов
/ 07 июля 2019

По какой-то причине, когда я вставляю новую строку в vim (либо с помощью клавиши o, либо с помощью ввода), vim требуется довольно много времени, чтобы фактически вставить новую строку. Эта проблема усугубляется, когда я нажимаю и удерживаю клавишу ввода - в этом случае vim полностью зависает и занимает около 3-4 секунд для рендеринга всех новых строк. Эта проблема, по-видимому, специфична для файлов Python, поскольку я протестировал это поведение с другими большими файлами, не относящимися к Python, и не вижу этой проблемы.

Некоторое замедление вызвано языковым пакетом vim-polyglot, но отключение этого плагина только немного помогло замедлению, но не полностью устранило его. Открытие файла с помощью vim -u NORC также не очень помогло, и единственный способ, которым я смог наконец получить плавную вставку новых строк, - это vim -u NONE или syntax off, что заставило меня поверить, что это подсветка синтаксиса. проблема.

Вот отчет о времени, в течение которого вы удерживаете клавишу ввода в течение нескольких секунд (при -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 голосов
/ 14 июля 2019

Поскольку -u NORC сохраняет плагины доступными, тогда как -u NONE отключает все, похоже, что плагин вызывает вашу проблему. Дальнейшая детективная работа будет включать постепенное добавление плагинов, пока вы не обнаружите преступника.

В контексте Neovim вы также можете запустить :checkhealth, который иногда может обнаруживать проблемы с поставщиками Python2 и Python3.

Наконец, вам также может пригодиться этот ответ о профилировании Vim .

...