【问题标题】:Vim spellcheck not always working in .tex file. Check region in VimVim 拼写检查并不总是在 .tex 文件中工作。在 Vim 中检查区域
【发布时间】:2026-02-05 05:55:01
【问题描述】:

我使用 Vim 编写我的 .tex 文件,但我在使用 Vim 中的拼写检查时遇到了问题。有时它不检查单词,我认为可能是以下原因。

由于 Vim 显然不应该检查 .tex 文档中的所有单词,例如,不检查序言,它只检查某些区域的拼写(在语法意义上)。正如我从here 收集到的,这些区域之一是texSectionZone。这些区域可能会变得非常大,实际上是一个部分,因此 Vim 很难意识到它实际上位于 texSectionZone 区域(或任何其他区域)中,因此不检查拼写。如果我在文档中进行搜索,或者任何类型的跳过多行(或者更确切地说是页面)的跳转,就会发生这种情况。

我得出的结论可能是以下原因:我知道命令

:echo synIDattr(synID(line("."),col("."),1),"name")

打印您所在的地区/地区的名称(我发现它here),所以当拼写检查器不起作用时,我尝试了这个,它告诉我它根本不在任何地区。它确实工作的地方,我在一个应该检查拼写的区域。

到目前为止,我唯一的解决方案是在我希望拼写者检查的点上方找到最近的部分,然后手动将光标向下移回给定点。

理想情况下,我非常希望有一个解决方案可以确保不会发生这种情况,但我也希望找到一种方法来手动使 vim '更新'它所在的区域,而无需我大量移动光标。在后一种情况下,我正在考虑一种可以采用捷径的解决方案。

PS 我不知道该怎么称呼这个问题。如果您想出一个可以更好地解释问题的标题,请随意更改它。

【问题讨论】:

    标签: vim latex spell-checking region


    【解决方案1】:

    如果没有定义(或由 vim 找到)语法组,则不会进行拼写检查。我发现即使对未定义的组启用拼写检查也很有用(请参阅 vim 语法文档中的 toplevel)。

    为此,请编写以下命令:

    syntax spell toplevel
    

    在文件~/.vim/after/syntax/tex.vim 中。如果文件不存在,则创建该文件。

    【讨论】:

    • 也许很明显,但它让我难住了;在此之前必须使用set spell
    • 我对 tex 文件没有问题,但对 yacc 有问题;谢谢你!顺便说一句:您当然不需要在特殊文件中使用它。你可以在你的.vimrc 文件中拥有它,也可以在设置拼写选项之后(如@Justapigeon 所述)。在.vimrc 中执行此操作是否会导致任何其他问题,或者不是我不知道的最佳方式,但对我来说它工作正常 - 至少乍一看。啊,但在我不想拼写检查的文件中可能会很烦人。无论如何感谢您的提示!
    【解决方案2】:

    syntax/tex.vim 已经使用了相当精细的同步模式来确保语法高亮是准确的,但是对于长而复杂的文档,这仍然可能会失败。

    你能做的最好的就是尝试增加两个值

    syn sync maxlines=200
    syn sync minlines=50
    

    (例如到 2000 和 500)。将其放入 ~/.vim/after/syntax/tex.vim 以覆盖默认值。

    syntax sync fromstart
    

    可能会给出最好的结果,但可能太慢了。您可以在 :help :syn-sync 找到语法同步的说明。

    【讨论】:

    • 这正是我想要的。我试图阅读:help sync-syn,但我必须承认我并不真正了解事情是如何运作的。 Vim 如何更新语法?是在某处做出的选择。也许这令人困惑。我要问的可能是:如果我运行 syntax sync fromstart,它会从文档的开头更新语法 once,还是告诉 Vim 它应该始终从头开始进行语法同步?
    • 后一种;如果这不会让 Vim 太慢,那就坚持下去吧!
    • 好的。网络上的大多数地方,人们建议的地方,他们都让它听起来只有一次。如果我之后运行:syn sync maxlines=200:syn sync minlines=50,是否将其设置回正常(默认)?
    • 这个只需要设置一次,最好在我回答中提到的after目录中。
    【解决方案3】:

    我手动设置文件类型:set filetype=plaintex,然后 vim 拼写非常适合我的 .tex 文档,它们是 LaTeX 文件。我的许多 .tex 文件被自动识别为 filetype=tex,当这种情况发生时,vim 的 spell 不会检查单个单词的拼写,尽管大部分文本是英文句子,通常是整段,根本没有任何 LaTeX 语法。我还发现我可以设置文件类型:set filetype=latex 并且也可以,但是我的一些自定义命令\dosomething 不被识别为语法,并且它们没有特殊的字体颜色......所以我手动@ 987654324@ 并且至少我以特殊字体颜色获得了自定义 LaTeX 命令的字体颜色。

    【讨论】: