修复硬盘故障后,我在运行 Windows 10 的 Thinkpad X230T 笔记本电脑上安装了 GVIM。除了*.tex
文件缓冲区的渲染速度外,其他一切都运行良好。问题是:使用 时syntax on
,latex 的缓冲区渲染速度异常缓慢。以下是“功能”列表:
- 当我按下时,需要几秒钟来刷新大小为 1920*1080(以像素为单位)的缓冲区
<C-f>
; - 如果我缩小缓冲区的大小,渲染速度会更快。不过,我至少会经历第二次延迟。在延迟期间,我只能看到一个空白的缓冲区。
- 文本操作也很慢。简单地按下 开始下面的新行
o
也会导致一秒的延迟。这主要是因为在添加一行后整个缓冲区的渲染:所有后续行都应刷新到其“新”位置。
我已经应用了这篇文章中提到的所有建议选项(https://stackoverflow.com/questions/8300982/vim-slow-running-latex-files),但渲染速度仍然同样缓慢。
我只在 X230T 上遇到了这种异常减速。在其他两台台式机上也遇到了同样的情况_vimrc
,渲染速度甚至没有出现任何微小的延迟。在同一台 X230T 笔记本电脑上安装 Windows 7 和 8 时,我也没有遇到渲染问题。
最后,对于硬盘,我的 X230T 上有一个 SSD,到目前为止运行良好;而我的另外两台台式机上都有 HDD。
任何建议都会非常有用!
多谢!
一切顺利,
-林峰
答案1
问题是,vim 的正则表达式引擎真的很慢,而且我猜 latex 对正则表达式的要求很高。
通过执行以下操作,我能够使 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
,因为此时语法定义尚未加载。
编辑2:
事实证明,我上面发布的一些语法组来自插件。禁用插件没有帮助,因为其他一些语法组很慢。哎呀!
我的最终修复以及我对语法高亮的全部要求是:
$ cat ~/.vim/after/syntax/tex.vim
syn clear
syn match texComment "%.*$"
hi def link texComment Comment
速度非常快。
答案2
您vim -u NONE filename.tex
在打开文件时已用来禁用您的.vimrc
脚本和其他脚本在会话中的加载,这样就解决了问题。
结论是该.vimrc
文件启动的某些操作导致了速度变慢。
尝试选择性地删除文件的部分内容以找出确切原因。记得进行备份。
答案3
Thinkapd X230T 本身的部分解决方案
问题识别
正如@Edd 所建议的,使用:syntime on
和syntime report
来识别最耗时的语法突出显示“group/region/match”';
部分解决方案
正如在以下 URL 中找到的,我已经将其加载到我的 Vim 发行版的目录tex.vim
中(就我的情况而言):after
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
。