4

После устранения неисправности жесткого диска я устанавливаю GVIM на свой ноутбук Thinkpad X230T, работающий под управлением Windows 10. Все работает хорошо, за исключением скорости рендеринга буферов для файлов *.tex . Проблема в том, что при syntax on буфер латекса работает исключительно медленно. Вот список "функций":

  1. Обновление буфера размером 1920 * 1080 (в пикселях) занимает несколько секунд, когда я <C-f> ;
  2. Если я уменьшу размер буфера, рендеринг станет быстрее. Тем не менее, я буду испытывать второе отставание как минимум. Во время задержки я вижу только пустой буфер.
  3. Текстовые операции также медленные. Простое начало новой строки ниже нажатием o также приведет к задержке в одну секунду. Во многом это связано с рендерингом всего буфера после добавления этой единственной строки: все последующие строки должны быть обновлены до их "новой" позиции.

В качестве примера скринкаста:

Я применил все предложенные варианты, упомянутые в этом посте (https://stackoverflow.com/questions/8300982/vim-slow-running-latex-files), но при этом все равно получаю ту же медленную скорость рендеринга.

Я испытывал только это исключительное замедление на моем X230T. С точно таким же _vimrc на двух других настольных компьютерах я даже не испытываю незначительного отставания в скорости рендеринга. Я также не испытывал проблемы с рендерингом при предыдущей установке Windows 7 и 8 на тот же ноутбук X230T.

Наконец, для жесткого диска у меня есть XD30 на моем X230T, который до сих пор работал довольно хорошо; и у меня есть HDD на двух других настольных компьютерах.

Любой совет будет очень полезным!

Большое спасибо!

Всего наилучшего,

-Linfeng

3 ответа3

6

Проблема в том, что механизм регулярных выражений vim очень медленный, и я думаю, что латекс довольно требователен к регулярным выражениям.

Я смог получить VIM немного быстрее, выполнив:

:syn clear texSectionFold
:syn clear texPreamble

Это были основные синтаксические регулярные выражения группы.

Я нашел их, сделав:

:syntime on

Теперь нажмите ctrl+L кучу раз и подождите, пока vim не догонит. Затем:

:syntime report

Это дало следующий вывод:

  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN
  8.903872   1911   52      0.017387    0.004659  texSectionFold     \v%(%(\\begin\{document\}.*$\n)@<=^|\\section)
  4.979438   1859   0       0.016382    0.002679  texPreamble        \v%(\\documentclass)@=
  0.634906   1976   182     0.010863    0.000321  texEnvName         \v%(\\%(begin|end)\{)@<=\a+\*?\ze\}
  0.373173   1859   0       0.000880    0.000201  texArgsEnvNormReq  \v(\\begin\{%(theorem|lemma|proposition|corollary|conjecture|definition|remark|example|proof)\*?\}\s*)@<=\{
  0.317732   1859   0       0.000468    0.000171  texArgsEnvNormOpt  \v(\\begin\{%(theorem|lemma|proposition|corollary|conjecture|definition|remark|example|proof)\*?\}\s*)@<=\[
  0.223595   1859   0       0.000341    0.000120  texDimen           \v-?%(\.[0-9]+|([0-9]+(\.[0-9]+)?))%(pt|pc|bp|in|cm|mm|dd|cc|sp|ex|em)>
...

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

Возможно, это вам тоже поможет, @llinfeng. Я надеюсь, что это так!

РЕДАКТИРОВАТЬ:

Чтобы запустить эти команды syn clear при запуске vim, вам нужно поместить их в ~/.vim/after/syntax/tex.vim . Он не будет работать в файле ftplugin , так как определения синтаксиса в этот момент еще не загружены.

EDIT2:

Оказывается, некоторые из синтаксических групп, которые я выложил выше, взяты из плагина. Отключение плагина не помогает, так как некоторые другие группы синтаксиса работают медленно. Eesh!

Мое окончательное исправление, и все, что я прошу из выделения синтаксиса, это:

$ cat ~/.vim/after/syntax/tex.vim 
syn clear
syn match texComment   "%.*$"                                            
hi def link texComment  Comment

Это действительно быстро.

1

Частичное решение для Thinkapd X230T само по себе

Идентификация проблемы

Как предложил @Edd, используйте :syntime on и syntime report для определения наиболее трудоемкой подсветки синтаксиса "group/region/match" ';

Частичное решение

Как можно найти в следующем URL, я загрузил tex.vim в каталог after моего дистрибутива Vim (c:\vim\vimfiles\after\syntax\ для моего случая):

https://github.com/llinfeng/Vim/blob/X230T/vimfiles/after/syntax/tex.vim

результат

Используя тот же файл LaTeX, моя улучшенная производительность выглядит следующим образом

Улучшенная производительность

Открытый вопрос --- как эффективно воспроизвести подсветку синтаксиса

Раскраска синтаксиса не идеальна по сравнению с нативным tex.vim который можно найти как c:\vim\vim80\syntax\tex.vim .

1

Вы использовали vim -u NONE filename.tex при открытии файла, чтобы отключить загрузку .vimrc и других скриптов для сессии, и это устранило проблему.

Вывод состоит в том, что что-то, запущенное файлом .vimrc вызывает замедление.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .