Vim在处理LaTeX文件时运行缓慢

8
我正在使用带有一堆插件(pathogen,ctags,snipmate,supertab等)的Vim,对于所有类型的文件扩展名,一切都很正常。然而,当我尝试编辑.tex文件时,它出现了两个问题,似乎是相关的。首先,Vim开始变得非常缓慢,其次,当我按“任何字母+ Tab”时,它会尝试使用以前在文本中编写的单词进行自动完成。我尝试解决这些问题的一种方法是从我的bundle文件夹中删除supertab插件,但这不是一个令人满意的解决方案。

你的意思是“当我按下任何字母 + <Tab>”吗? - romainl
在C++中,我倾向于使用:set completeopt-=i - 不确定它是否对latex有帮助。 - sehe
当我编辑LaTeX文件时,我也遇到了一些缓慢的情况。打开LaTeX文件的语法高亮似乎起了作用。 - amillerrhodes
5个回答

7
问题出在“relativenumber”选项上,当我将其关闭后,latex编辑速度恢复正常。

2
对于其他遇到相同问题和LaTeX文件UI缓慢的用户,问题可能是cursorline开启了。通过切换到set nocursorline,UI变得完全响应。我不知道为什么这只会发生在LaTeX文档中。 - koo

2
以下的relativenumber、cursorline和MatchParen可能会使vim变得非常缓慢,尤其是在处理大型latex文件时。当我关闭它们后,vim在处理大型latex文件时变得更加响应。
要关闭相对行号,请在编辑模式下键入以下内容:
:set nornu
要关闭光标行,请在编辑模式下键入以下内容:
:set nocursorline 要关闭MatchParen,请在编辑模式下键入以下内容:
:NoMatchParen
如果您仍想要常规行编号,则可以使用以下命令:
:set number 为了更长久的解决方案,您还可以在您的~/.vimrc文件中设置特定于latex的设置:
" Latex specification
au BufNewFile,BufRead *.tex
    \ set nocursorline |
    \ set nornu |
    \ set number |
    \ let g:loaded_matchparen=1 |
\|的作用是允许您将LaTeX命令分别添加到多行。

哇塞,这太糟糕了!cursorline 对我影响很大。你有任何想法为什么会发生这种情况吗?我觉得这真的真的不应该发生! - srs

1
其他两个可能的问题是以下两个处于活动状态:
  1. cursorline
  2. DoMatchParen
因此,为了使您的LATEX编辑体验更好,您可以在您的~/.vimrc中执行以下操作。
au FileType tex setlocal nocursorline
au FileType tex :NoMatchParen

完成这些步骤后,我的Vim处理.tex文件的速度与处理.cpp文件的速度一样快。


1

我知道这是一个老问题,但是如果有人现在看到这个问题,最好使用.vim目录下的ftplugin/文件夹来指定Vim在特定文件类型上启用某些选项。创建一个名为tex.vim的文件,路径为~/.vim/ftplugin/tex.vim,并包含以下选项:

set nocursorline
set nornu
let g:loaded_matchparen=1

这样做可以使Vim仅在TeX文件(*.tex及其相关文件)中加载这些选项,而无需像gloriphobia的回答一样使用:autocommand


我认为这应该是对提到的答案的评论,而不是单独的回答(我也知道你没有足够的声望来发表评论,抱歉)。 - Maëlan
感谢您的编辑,现在我可以在任何地方发表评论了哈哈哈)。作者还没有选择一个被接受的答案。我应该只在问题本身上发表评论吗? - nionios
太好了。:-) 我会说你把它放在gloriphobia的答案下面,尽管同样的建议也适用于其他答案。 - Maëlan

0

Folding(折叠)是另一个常见的减速源。通常情况下,它是默认禁用的,但也许你已经启用了它。你可以再次禁用它:

" (1) if you use the builtin TeX support:
  " comment the line in your vimrc that looks like this:
  "let g:tex_fold_enabled = ...
  " OR, just to be sure, do:
  unlet! g:tex_fold_enabled

" (2) if you rather use VimTeX:
  " comment the line in your vimrc that looks like this:
  "let g:vimtex_fold_enabled = 1
  " OR, just to be sure, do:
  let g:vimtex_fold_enabled = 0

请注意,在加载缓冲区中的TeX语法之前,必须启用/禁用折叠。此外,Vim选项'foldenable'(通过正常模式命令'zi'切换)实际上并不清除折叠,它只是隐藏了它,但它仍然存在。
然而,如果您不想完全放弃折叠,我发现内置的TeX折叠中有一个瓶颈,它在我的情况下负责大部分减速:即'document'环境。简单测试:在'\begin{document}'之前输入内容相当快,但在其后面输入则非常缓慢。我猜这是因为该环境通常跨越数百行。
如果您使用内置的TeX折叠,可以通过禁用'texDocZone'匹配组¹来防止仅对'document'环境进行折叠。无论如何,为什么要折叠顶层内容呢?
" put this in your vimrc :
au FileType tex :syntax clear texDocZone
" OR put this in ~/.vim/after/syntax/tex.vim :
syntax clear texDocZone

另外,如果您安装了 VimTeX,您可以将内置的 TeX 折叠替换为 VimTeX 的折叠。我发现它通常更好,并且它会小心地避免折叠 document 环境。

" put this in your vimrc :
unlet! g:tex_fold_enabled  " just to be sure
let g:vimtex_fold_enabled = 1

VimTeX的折叠功能可以很好地进行自定义,详见:help vimtex-folding


截至2022年4月版本121(内置的TeX语法)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接