LINUX.ORG.RU

Ужасно медленная работа syntax on vim в больших файлах

 , , , ,


0

3

Собственно проблема в том, что вим ужасно лагает в больших файлах (размером более 250 строк). Проблема явно заключается в syntax on, потому что когда комменчу его, все работает идеально и плавно. Что-то явно тормозит работу и я никак не могу это поправить. Изменение прорисовки синтаксиса по колонками и строчкам тоже не работает должным образом

" search option
set ignorecase " C and c - same
set incsearch
set hlsearch " search highlight

" set foldmethod=manual/syntax/indent           " code blocks folding
"
"
set t_Co=256
set termguicolors
set number
set cursorline!
set lazyredraw

set mouse=a
set tabstop=4
set shiftwidth=4

syntax on
colorscheme pencil
:set background=dark

let g:pencil_higher_contrast_ui = 1
let g:pencil_neutral_code_bg = 1

"Bundle conf
set nocompatible              " be iMproved, required filetype off                  " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'Konfekt/FastFold'
Plugin 'tmhedberg/SimpylFold'
call vundle#end()            " required
filetype plugin indent on    " required

" SimplyFold configuration
let g:SimpylFold_fold_import = 0
let b:SimpylFold_fold_import = 0
:syntime
TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN
  3.167754   69639  35094   0.003978    0.000045  vimFunc            \%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_]\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(
  2.550682   47039  13241   0.003994    0.000054  vimOper            \(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\)[?#]\{0,2}
  2.213540   34745  0       0.003979    0.000064  vimNotation        \(\\\|<lt>\)\=<\([scamd]-\)\{0,4}x\=\(f\d\{1,2}\|[^ \t:]\|cr\|lf\|linefeed\|return\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\
  1.968102   137681 103136   0.006303   0.000014  vimRegister        [^,;[{: \t]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]
  1.944017   34745  0       0.004034    0.000056  vimSubst           \(:\+\s*\|^\s*\||\s*\)\<\%(\<s\%[ubstitute]\>\|\<sm\%[agic]\>\|\<sno\%[magic]\>\)[:#[:alpha:]]\@!
  1.433655   34745  0       0.004638    0.000041  vimNotation        \(\\\|<lt>\)\=<\%(q-\)\=\(line[12]\|count\|bang\|reg\|args\|mods\|f-args\|f-mods\|lt\)>
  1.407159   35589  1560    0.004130    0.000040  vimNotFunc         \<if\>\|\<el\%[seif]\>\|\<return\>\|\<while\>
  1.373244   34745  0       0.004306    0.000040  vimNotation        \(\\\|<lt>\)\=<\([scam2-4]-\)\{0,4}\(right\|left\|middle\)\(mouse\)\=\(drag\|release\)\=>
  1.217363   34745  0       0.004651    0.000035  vimNotation        \(\\\|<lt>\)\=<\([cas]file\|abuf\|amatch\|cword\|cWORD\|client\)>
  1.190212   34745  0       0.005118    0.000034  vimNotation        \(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]
  1.179544   34745  0       0.003897    0.000034  vimNotation        \(\\\|<lt>\)\=<\(bslash\|plug\|sid\|space\|bar\|nop\|nul\|lt\)>
  0.954091   37640  3826    0.003575    0.000025  vimOper            ||\|&&\|[-+.]
  0.945757   37059  2658    0.004125    0.000026  vimNumber          \%(^\|[^a-zA-Z]\)\zs#\x\{6}
  0.842486   153654 121840   0.002084   0.000005  vimString          [^a-zA-Z>!\\@]"
  0.812257   34745  0       0.003546    0.000023  vimSubst           \(:\+\s*\|^\s*\)s\ze#.\{-}#.\{-}#
  0.718847   19122  108     0.004644    0.000038  vimEscapeBrace     [^\\]\(\\\\\)*\[\zs\^\=\]\=
  0.690883   63294  48315   0.003902    0.000011  vimVar             \<[bwglstav]:\h[a-zA-Z0-9#_]*\>
  0.662216   34745  1553    0.004944    0.000019  vimSpecFile        #\d\+\|[#%]<\>
  0.646379   35195  675     0.003503    0.000018  vimString          [^(,]'[^']\{-}\zs'

система Arch linux, последний раз обновлял недавно

Перемещено leave из multimedia

Ответ на: комментарий от andreyu

И что делать то тогда? Без подсветки не комильфо, да и все же у большенства очень даже хорошо и стабильно это дело работает

wh75per ()

На 188 строках:

TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN
  0.005991   298    166     0.000090    0.000020  shDoubleQuote      \%(\%(\\\\\)*\\\)\@<!"
  0.004502   148    44      0.000162    0.000030  shEscape           \%(^\)\@!\%(\\\\\)*\\.
  0.003770   140    36      0.000147    0.000027  shSpecial          [^\\]\(\\\\\)*\zs\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[ab
efnrtv]444   174    0       0.000105    0.000020  shSpecial          [^\\]\zs\%(\\\\\)*\\[\\"'`$()#]
  0.002814   176    34      0.000129    0.000016  shVariable         \<\([bwglsav]:\)\=[a-zA-Z0-9.!@_%+,]*\ze=
  0.002512   150    0       0.000104    0.000017  shStringSpecial    [^\\]\zs\%(\\\\\)*\\[\\"'`$()#]
  0.002488   192    18      0.000078    0.000013  shSubSh            [^(]\zs(
  0.002122   174    0       0.000062    0.000012  shSetList          \<\(declare\|typeset\|local\|export\|unset\)\>\ze[
^/].001868   176    34      0.000061    0.000011  shOperator         [-=/*+%]\==
  0.001763   174    2       0.000053    0.000010  shRedir            \d\=<\(&[-0-9]\)\=
  0.001756   190    20      0.000054    0.000009  shRedir            \d\=>\(&[-0-9]\)\=
  0.001687   174    2       0.000051    0.000010  shRedir            \d\=>>-\=
  0.001684   190    26      0.000051    0.000009  shNumber           \<-\=\.\=\d\+\>#\=
  0.001517   282    120     0.000034    0.000005  shOption           \s\zs[-+][-_a-zA-Z#@]\+
  0.001515   176    0       0.000047    0.000009  shComment          \s\zs#.*$
  0.001508   178    4       0.000039    0.000008  shOption           \s\zs--[^ \t$`'"|);]\+
  0.001401   174    0       0.000067    0.000008  shSource           \s\.\s
  0.001353   122    4       0.000066    0.000011  shParen            \$\@!(\%(\ze[^(]\|$\)
  0.001335   452    284     0.000025    0.000003  shDerefSimple      \$\%(\h\w*\|\d\)
...
Сейчас попробую больше.

Niroday ()

540 строк

0.032929   2977   1555    0.000122    0.000011  shDoubleQuote      \%(\%(\\\\\)*\\\)\@<!"
  0.027534   1542   441     0.000175    0.000018  shEscape           \%(^\)\@!\%(\\\\\)*\\.
  0.022484   1459   358     0.000148    0.000015  shSpecial          [^\\]\(\\\\\)*\zs\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[ab
efnrtv]090   1832   0       0.000120    0.000012  shSpecial          [^\\]\zs\%(\\\\\)*\\[\\"'`$()#]
  0.018292   1840   187     0.000118    0.000010  shVariable         \<\([bwglsav]:\)\=[a-zA-Z0-9.!@_%+,]*\ze=
  0.017696   1521   0       0.000106    0.000012  shStringSpecial    [^\\]\zs\%(\\\\\)*\\[\\"'`$()#]
  0.015944   2006   200     0.000076    0.000008  shSubSh            [^(]\zs(
  0.013491   1829   0       0.000065    0.000007  shSetList          \<\(declare\|typeset\|local\|export\|unset\)\>\ze[
^/].012416   1863   210     0.000068    0.000007  shOperator         [-=/*+%]\==
  0.011506   1829   5       0.000057    0.000006  shRedir            \d\=<\(&[-0-9]\)\=
  0.011448   2088   292     0.000053    0.000005  shRedir            \d\=>\(&[-0-9]\)\=
  0.011377   1829   5       0.000063    0.000006  shRedir            \d\=>>-\=
  0.010380   1995   375     0.000062    0.000005  shNumber           \<-\=\.\=\d\+\>#\=
  0.009913   1854   0       0.000065    0.000005  shComment          \s\zs#.*$
  0.009605   1894   65      0.000044    0.000005  shOption           \s\zs--[^ \t$`'"|);]\+
  0.009470   2961   1231    0.000046    0.000003  shOption           \s\zs[-+][-_a-zA-Z#@]\+
  0.008611   1995   375     0.000047    0.000004  shNumber           \<\d\+\>#\=
  0.008610   1829   0       0.000065    0.000005  shSource           \s\.\s
  0.008413   1223   45      0.000083    0.000007  shParen            \$\@!(\%(\ze[^(]\|$\)
  0.008198   4402   2639    0.000025    0.000002  shDerefSimple      \$\%(\h\w*\|\d\)

vim 8.0.1542. Никаких лагов нет.

Niroday ()
Ответ на: комментарий от Niroday

уууух, файл с 110 строчек

  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN
  1.181399   25595  0       0.000708    0.000046  pythonMatrixMultiply ^\s*\%(\%(>>>\|\.\.\.\)\s\+\)\=\zs\%(\h\|\%(\h\|[[(]\).\{-}\%(\w\|[])]\)\)\s*\n\%(\s*\.\.\.\s\)\=\s\+@\%(.\{-}\n\%(\s
*
  0.748883   30460  5654    0.000685    0.000025  pythonNumber       \%(^\|\W\)\zs\d*\.\d\+\%([eE][+-]\=\d\+\)\=[jJ]\=\>
  0.702578   25595  0       0.000923    0.000027  pythonString       [uU]\=\z('''\|"""\)
  0.652835   25595  0       0.001152    0.000026  pythonMatrixMultiply \%(\w\|[])]\)\s*@
  0.629231   29261  3666    0.000765    0.000022  pythonString       [uU]\=\z(['"]\)
  0.582630   59415  35843   0.000747    0.000010  pythonNumber       \<\%([1-9]\d*\|0\)[Ll]\=\>
  0.432327   25595  0       0.000445    0.000017  pythonRawString    [uU]\=[rR]\z('''\|"""\)
  0.423406   26276  681     0.000536    0.000016  pythonRawString    [uU]\=[rR]\z(['"]\)
  0.390528   25595  0       0.000386    0.000015  pythonMatrixMultiply [^\\]\\\s*\n\%(\s*\.\.\.\s\)\=\s\+@
  0.376976   67904  42404   0.000424    0.000006  pythonAttribute    \.\h\w*
версия такая же

wh75per ()
Ответ на: комментарий от Niroday

Видел ее, но непонятно, что мне нужно фиксить, там все дело было в плагине

wh75per ()
Ответ на: комментарий от bread

Да, все идеально пашет вот запуск вима через sudo(большой файл на 300-той строке)

  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN
  0.059924   548    331     0.001006    0.000109  vimFunc            \%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_]\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(
  0.047171   217    5       0.001054    0.000217  vimOper            \(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\)[?#]\{0,2}
  0.045767   217    0       0.000854    0.000211  vimNotation        \(\\\|<lt>\)\=<\([scamd]-\)\{0,4}x\=\(f\d\{1,2}\|[^ \t:]\|cr\|lf\|linefeed\|return\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\
  0.040535   217    0       0.001563    0.000187  vimSubst           \(:\+\s*\|^\s*\||\s*\)\<\%(\<s\%[ubstitute]\>\|\<sm\%[agic]\>\|\<sno\%[magic]\>\)[:#[:alpha:]]\@!
  0.037665   1184   967     0.000211    0.000032  vimRegister        [^,;[{: \t]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]
  0.030265   217    0       0.000698    0.000139  vimNotation        \(\\\|<lt>\)\=<\%(q-\)\=\(line[12]\|count\|bang\|reg\|args\|mods\|f-args\|f-mods\|lt\)>
  0.029878   217    0       0.000680    0.000138  vimNotFunc         \<if\>\|\<el\%[seif]\>\|\<return\>\|\<while\>
  0.029016   217    0       0.004704    0.000134  vimNotation        \(\\\|<lt>\)\=<\(bslash\|plug\|sid\|space\|bar\|nop\|nul\|lt\)>
  0.027834   217    0       0.000711    0.000128  vimNotation        \(\\\|<lt>\)\=<\([scam2-4]-\)\{0,4}\(right\|left\|middle\)\(mouse\)\=\(drag\|release\)\=>
  0.024934   217    0       0.000576    0.000115  vimNotation        \(\\\|<lt>\)\=<\([cas]file\|abuf\|amatch\|cword\|cWORD\|client\)>
  0.024198   217    0       0.000619    0.000112  vimNotation        \(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]
  0.018578   217    6       0.000296    0.000086  vimOper            ||\|&&\|[-+.]

wh75per ()
Ответ на: комментарий от bread

Спасибо, мил человек, это помогло! Очень жаль, конечно, что не cursorline придется убрать, но это терпимо

  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN
  0.068674   490    294     0.004355    0.000140  vimFunc            \%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_]\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(
  0.052946   196    0       0.000688    0.000270  vimNotation        \(\\\|<lt>\)\=<\([scamd]-\)\{0,4}x\=\(f\d\{1,2}\|[^ \t:]\|cr\|lf\|linefeed\|return\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\
  0.048672   196    4       0.000787    0.000248  vimOper            \(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\)[?#]\{0,2}
  0.043512   196    0       0.000553    0.000222  vimSubst           \(:\+\s*\|^\s*\||\s*\)\<\%(\<s\%[ubstitute]\>\|\<sm\%[agic]\>\|\<sno\%[magic]\>\)[:#[:alpha:]]\@!
  0.041327   1041   845     0.000192    0.000040  vimRegister        [^,;[{: \t]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]
  0.033454   196    0       0.000459    0.000171  vimNotation        \(\\\|<lt>\)\=<\%(q-\)\=\(line[12]\|count\|bang\|reg\|args\|mods\|f-args\|f-mods\|lt\)>
  0.031499   200    5       0.000485    0.000157  vimNotFunc         \<if\>\|\<el\%[seif]\>\|\<return\>\|\<while\>
  0.030326   196    0       0.000445    0.000155  vimNotation        \(\\\|<lt>\)\=<\([scam2-4]-\)\{0,4}\(right\|left\|middle\)\(mouse\)\=\(drag\|release\)\=>
  0.026942   196    0       0.000509    0.000137  vimNotation        \(\\\|<lt>\)\=<\([cas]file\|abuf\|amatch\|cword\|cWORD\|client\)>
  0.026468   196    0       0.000441    0.000135  vimNotation        \(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]
  0.026449   196    0       0.000409    0.000135  vimNotation        \(\\\|<lt>\)\=<\(bslash\|plug\|sid\|space\|bar\|nop\|nul\|lt\)>
  0.020428   196    6       0.000816    0.000104  vimOper            ||\|&&\|[-+.]
  0.018638   196    3       0.000337    0.000095  vimNumber          \%(^\|[^a-zA-Z]\)\zs#\x\{6}

wh75per ()
Ответ на: комментарий от wh75per

Очень жаль, конечно, что не cursorline придется убрать, но это терпимо

Тоже когда-то давно отключил подсветку и строки, и колонки. Это помогло избавиться от явных тормозов. Но это не лечение болезни, а сокрытие симптомов.

andreyu ★★★★★ ()
Ответ на: комментарий от andreyu

Не знаю, не знаю. У знакомых все хорошо пашет без всяких лагов и на больших файлах. Возможно, проблема каким-то боком в железе? Вообще я натыкался на статейки по поводу «лечения» алгоритма подсветки синтаксиса, но там это делалось по-разному для каждого из языков по отдельности, а этим как-то не хочется заниматься

wh75per ()
Ответ на: комментарий от wh75per

Возможно, проблема каким-то боком в железе?

Нет, подсветка синтаксиса в виме тормозная. Печально, но факт.

andreyu ★★★★★ ()
Ответ на: комментарий от bodqhrohro_promo

Есть куча хомячковых CUAшных редакторов с подсветкой синтаксиса, которые таким не страдают.

Зато в них редактор забыли завезти. Сиди себе, юзер, наслаждайся раскраской.

bread ()
Ответ на: комментарий от wh75per

натыкался на статейки по поводу «лечения» алгоритма подсветки синтаксиса

Многое зависит от конкретных регекспов. Я помню как подсветку в руби ускорили раз в 100 просто заменив один регексп. Система конечно архаичная, зато позволяет очень легко и быстро добавить подсветку для любого языка.

bread ()
Ответ на: комментарий от Xwo

в Имаксе она не лучше :Р. Если подсвечивать не больше 160символов, то жить можно)

Хм, я думал в emacs подсветка реализована лучше. Значит одним плюсом у emacs стало меньше.

andreyu ★★★★★ ()
Ответ на: комментарий от bread

Отнюдь, там тоже куча всего есть и ещё больше завозится плагинчиками. Только два недостатка — черезжопное управление и неработоспособность без графической подсистемы. Собственно, вимеры/эмаксеры отличаются от нормальных людей тем, что для них эти два мелких недостатка перевешивают все остальные.

bodqhrohro_promo ()
Ответ на: комментарий от bread

Ну если эти буратины строчат индусский код по тыщу строк в час и ни о чём не задумываются, то дык. А так думать надо.

bodqhrohro_promo ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.