Vim 在使用 LaTeX 语法高亮显示缓冲区时速度很慢

lli*_*eng 5 vim latex gvim vim-plugins

修复硬盘驱动器故障后,我在运行 Windows 10 的 Thinkpad X230T 笔记本电脑上安装 GVIM。除了*.tex文件缓冲区的渲染速度外,一切运行良好。问题是:使用syntax on,乳胶的缓冲区呈现异常缓慢。这是“功能”列表:

  1. 当我按下 时,刷新大小为 1920*1080(以像素为单位)的缓冲区需要几秒钟的时间<C-f>
  2. 如果我缩小缓冲区的大小,渲染会变得更快。尽管如此,我至少会经历第二次滞后。在滞后期间,我只能看到一个空白缓冲区。
  3. 文本操作也很慢。简单地通过按下在下面开始一个新行o也会以一秒的延迟结束。这主要是由于在添加单行之后渲染了整个缓冲区:后面的所有行都应刷新它们的“新”位置。

作为示例截屏视频: 在此处输入图片说明

我已经应用了这篇文章中提到的所有建议选项(/sf/ask/581068771/),但我仍然获得相同的缓慢渲染速度。

我只是在我的 X230T 上遇到了这种异常的减速。在_vimrc其他两台台式机上完全相同,我什至没有遇到渲染速度的微小滞后。我之前在同一台 X230T 笔记本电脑上安装 Windows 7 和 8 时也没有遇到渲染问题。

最后,对于硬盘驱动器,我的 X230T 上有一个 SSD,到目前为止运行良好;我在另外两台台式机上都有硬盘。

任何建议都会非常有帮助!

非常感谢!

祝一切顺利,

-临风

Edd*_*ett 7

问题是,vim 的正则表达式引擎真的很慢,而且我猜 Latex 对正则表达式的要求很高。

通过执行以下操作,我能够更快地获得 vim:

:syn clear texSectionFold
:syn clear texPreamble
Run Code Online (Sandbox Code Playgroud)

这些是主要的违规语法组正则表达式。

我通过以下方式找到了它们:

:syntime on
Run Code Online (Sandbox Code Playgroud)

现在按ctrl+L很多次并等待 vim 赶上。然后:

:syntime report
Run Code Online (Sandbox Code Playgroud)

这给出了以下输出:

  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)>
...
Run Code Online (Sandbox Code Playgroud)

所以你可以看到这两个正则表达式比其他正则表达式贵得多。我不使用折叠,所以禁用它没有问题。不知道为什么找到序言这么慢。

也许这对你也有帮助,@llinfeng。但愿如此!

编辑:

syn clear在 vim 启动时运行这些命令,您需要将它们放在~/.vim/after/syntax/tex.vim. 它不会在ftplugin文件中工作,因为此时尚未加载语法定义。

编辑2:

原来我上面发布的一些语法组来自一个插件。禁用插件无济于事,因为其他一些语法组很慢。哎呀!

我的最终修复,以及我从语法高亮中提出的所有要求,是:

$ cat ~/.vim/after/syntax/tex.vim 
syn clear
syn match texComment   "%.*$"                                            
hi def link texComment  Comment
Run Code Online (Sandbox Code Playgroud)

它真的很快。