Vim медленный при рендеринге буфера с подсветкой синтаксиса LaTeX

1182
llinfeng

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

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

В качестве примера скринкаста: Vim медленный при рендеринге буфера с подсветкой синтаксиса LaTeX

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

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

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

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

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

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

-Linfeng

4
Did you figure this out in the end? I have the same on a x230t running OpenBSD. Edd Barrett 8 лет назад 0
@EddBarrett, нет, не знаю. В итоге я использую подключение к удаленному рабочему столу на своем ноутбуке X230T для доступа к своему домашнему настольному компьютеру, который не отображает задержки при рендеринге. Может статься, что X230T слишком стар для современных операционных систем. (У меня определенно нет проблем с рендерингом файлов * .tex, когда я использовал Windows 7 и Windows 8.1). Удачи на вашей стороне. llinfeng 8 лет назад 0
Я считаю, что отключение подсветки синтаксиса помогает. Edd Barrett 8 лет назад 2
Определенно! Большое спасибо! Некоторое время я устанавливал тип файла в null :) llinfeng 8 лет назад 0
Попробуйте открыть файл с помощью: `vim -u NONE filename.tex`, чтобы отключить загрузку .vimrc и других сценариев для сессии. Если это поможет, см. [Этот метод] (http://stackoverflow.com/a/12216578/165358), чтобы узнать, где именно находится замедление. harrymc 8 лет назад 0
@harrymc, мой Vim загружает файлы `* .tex` без задержки при запуске с опциями" -u NONE "; и попытался войти в "профиль". Тем не менее, вывод «profile.log» довольно сложен, и я не могу найти функцию, которая вызывается для «рендеринга» буфера. У вас есть идея, какую функцию я буду изучать? llinfeng 8 лет назад 0
Для пояснения: устраняет ли проблема «-u НЕТ», даже если подсветка синтаксиса включена? harrymc 8 лет назад 0
Да, опция «-u НЕТ» устраняет проблему рендеринга, даже если подсветка синтаксиса включена. llinfeng 8 лет назад 0
Затем файл vimrc запускает замедление. Попробуйте выборочно удалить его части, чтобы выяснить, где именно причина (сделайте резервную копию). harrymc 8 лет назад 0
@EddBarrett, вы пытались расшифровать вывод из `profile`-ing? Мой довольно запутанный, и я не нахожу определенный журнал, который записывает количество страниц рендеринга. Я предполагаю, что это зависит от машины: может быть, какое-то оборудование X230T больше не совместимо с «основным» дистрибутивом Vim? llinfeng 7 лет назад 0

3 ответа на вопрос

6
Edd Barrett

Проблема в том, что механизм регулярных выражений 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\.*$\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 

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

Привет @Edd, спасибо большое! Мой «отчет о времени выполнения» более недружелюбен, как вы можете видеть здесь https://www.dropbox.com/s/guxzuqcuu2p510n/syntime_report_Tex.png?dl=0 Разница в том, что мое замедление рендеринга может быть связано с буквально все варианты отображения. Сейчас я буду искать способ только «рисовать цветом» для математических выражений. llinfeng 7 лет назад 0
Рад, что помог. Я все еще чувствую, что с vim что-то не так, если эти современные машины не могут выполнять несколько регулярных выражений. FWIW я тоже пробовал с неовим, и там тоже самое было. Edd Barrett 7 лет назад 0
Привет @Edd, здесь идет минимальный файл подсветки синтаксиса, который я создал, в нем больше * color * (все же, так как я не очень хорошо понимаю подсветку синтаксиса, он может быть дрянным во всех возможных отношениях): https : //github.com/llinfeng/Vim/blob/X230T/vimfiles/after/syntax/tex.vim llinfeng 7 лет назад 0
1
harrymc

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

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

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

Как упомянуто выше, проблема связана с палитрой синтаксиса, встроенной в vim, а не с плагином. Edd Barrett 7 лет назад 0
@EddBarrett: я запутался между тобой и llinfeng. Он говорит, что без подсветки синтаксиса .vimrc достаточно быстро. Я не знаю, что вызывает замедление в его .vimrc, но вы можете проверить, так ли это с вашим. Я не могу проверить это, поскольку я не использую латекс. harrymc 7 лет назад 0
Без .vimrc вы не получите никакой подсветки синтаксиса, вам нужно `: установить синтаксис = on` в vimrc. Edd Barrett 7 лет назад 0
@EddBarrett: Вероятно, это можно включить и во время выполнения, но одним хорошим тестом может быть использование .vimrc, в котором есть только эта строка. В любом случае, я советовал воссоздавать файл поэтапно, пока проблема не появится снова (если она действительно исчезнет, ​​как мне сказали). harrymc 7 лет назад 0
1
llinfeng

Частичное решение для 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, моя улучшенная производительность выглядит следующим образом

Improved Performance

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

Синтаксиса не является идеальным, по сравнению с родным, tex.vimчтобы найти как c:\vim\vim80\syntax\tex.vim.