我刚刚正确安装并运行了 Latex-suite,但当我这样做时,:help latex-suite.txt
我得到了:
“latex-suite.txt” [只读] 3474L,151620B 处理模式行时检测到错误:第 3473 行:E992:当“modelineexpr”关闭时,模式行中不允许:foldtext=substitute(v:folddash es.substitute(getline(v:foldstart),'\s*\。'、'、'、'^--'、'\ \ \ \ \ '、'') 按 ENTER 或键入命令继续
当我按下回车键时,vim 会分成两个,并加载帮助文件。非常酷,除了那个烦人的错误消息。发生了什么事,我该如何消除 E992?它似乎位于该文件的末尾附近,假设第 3473 行有 vim 不喜欢的东西。我试过研究关键字模式行,我检查了那个 *.txt 文件的结尾,但没有任何意义。我对 vim 的内部结构了解不够,无法理解发生了什么。
答案1
在 Vim 版本 8.2 的 options.txt 中可以找到以下内容:
E992
出于安全原因(有人可能会使用模式行创建特洛伊木马文本文件),不支持除“set”之外的其他命令。而且并非所有选项都可以设置。对于某些选项,会设置一个标志,这样当使用该值时,沙箱就会生效。只有设置了“modelineexpr”时,才能从模式行设置某些选项(默认为关闭)。
如果启用了模式行,Latex-Suite 中似乎有很多选项可以从模式行中设置,我无法想象它的作者创建了一个特洛伊木马,并
~/.vim/doc/latex-suite.txt
在最后三行中有三个模式行表达式。如果没有,set modelineexpr on
在 vim 中请求 latex 或 latex-suite 帮助时,您会收到 E992 消息。但是,这个选项在 latex-suite 之外是未知的,至少在我使用 vim 的方式中是未知的,因此,仅在 .vimrc 中启用它会在使用 vim 编辑非 tex 文件(例如 .vimrc 本身)时产生错误警告。我使用 vim 进行很多编辑任务,除了乳胶文档创建,事实上,我第一次以这种方式使用 vim,将它与 TexShop 和 texmaker 进行比较,看看我更喜欢哪一个(我自愿在当地一所社区大学担任数学导师)。我讨厌错误和警告消息,尤其是在安装后。它们断言安装或软件包存在严重问题。我不会使用产品,直到所有早期错误或警告消息都消除,并且在某些时候,我将不得不指导我的学生安装我选择的任何产品。在解决这个问题时,我发现Vimscript。伙计,这个实现令人印象深刻。emacs,你终于遇到对手了!
因此,为了解决 latex-suite 中的 E992 问题,并为了防止在使用 vim 处理 Perl 或 C 时出现相关问题,我添加了这个Vimscript表达式到我的 .vimrc,即:
" This conditional is needed to suppress E992 error in latex-suite.
if &filetype ==# 'plaintex'
set modelineexpr on
endif
plaintex 是 vim 分配给 *.tex 文件的文件类型。
如果 Latex-suites 的作者或任何其他 vim/tex 专家认为这是一个愚蠢的解决方案,请发表评论。我可以想象一个<leader>
键映射来打开和关闭此选项,但我对我的解决方案很满意。它非常明显,而那个命令则不是,人们必须记住在寻求帮助之前将其打开。否则,我会在适当的时候将此问题标记为已解决。