【问题标题】:Vim spell checking filetype=tex filesVim 拼写检查 filetype=tex 文件
【发布时间】:2025-11-21 17:00:02
【问题描述】:

当我打开以.tex 结尾的文件时,我的 vim 拼写检查不正确。

如果我有一个名为 foo.txt 的文本文件并在 vim 中打开它并执行 :set spell,我会突出显示拼写错误的单词,我可以使用 ]s 等移动到它们,然后我会得到更正选项z=。如果我将foo.txt 重命名为foo.tex 并在vim 中打开它,:set spell 什么也不做,]s 什么也不做,但是当光标在一个单词上时键入z= 确实提供了更正选项。

当我在 vim 中打开 foo.tex 并执行 :set filetype 时,我得到 filetype=tex。如果我改为使用:set filetype=latex:set spell]s 等,一切正常。

如何使用.tex 文件类型文件进行拼写检查?请注意,我只想在明确执行 :set spell 时进行拼写检查,我不希望默认情况下启用它。

【问题讨论】:

    标签: vim


    【解决方案1】:

    tex 文件类型指定应该对哪些语法区域进行拼写检查,而不是让整个缓冲区进行拼写检查。这样做是为了避免标记在实际上不应该进行拼写检查时被标记为拼写错误。

    还有一些变量可以调整拼写检查的区域,如:help ft-tex-syntax 中所述:

                            *g:tex_nospell*
     Tex: No Spell Checking Wanted~
    
    If you don't want spell checking anywhere in your LaTeX document, put >
        let g:tex_nospell=1
    into your .vimrc.  If you merely wish to suppress spell checking inside
    comments only, see |g:tex_comment_nospell|.
    
                    *tex-nospell* *g:tex_comment_nospell*
     Tex: Don't Want Spell Checking In Comments? ~
    
    Some folks like to include things like source code in comments and so would
    prefer that spell checking be disabled in comments in LaTeX files.  To do
    this, put the following in your <.vimrc>: >
          let g:tex_comment_nospell= 1
    If you want to suppress spell checking everywhere inside your LaTeX document,
    see |g:tex_nospell|.
    
                    *tex-verb* *g:tex_verbspell*
     Tex: Want Spell Checking in Verbatim Zones?~
    
    Often verbatim regions are used for things like source code; seldom does
    one want source code spell-checked.  However, for those of you who do
    want your verbatim zones spell-checked, put the following in your <.vimrc>: >
        let g:tex_verbspell= 1
    

    当你set filetype=latex 时它起作用的原因是因为没有乳胶文件类型(除非你下载了一个)。 tex 文件类型的所有语法规则都被清除,因此整个缓冲区都经过拼写检查,这是在未定义语法级别拼写检查时的默认设置。

    如果您不希望拼写检查仅限于特定语法区域,您可以将以下内容添加到 ~/.vim/after/syntax/tex.vim

    syntax spell toplevel
    

    【讨论】:

    • 非常有启发性。我的set filetype=latex 业务让我很傻。我没有意识到我只是将文件设置为没有类型。我认为有一个乳胶文件类型,因为我见过像let g:tex_flavor = "latex" 这样的命令。
    • syntax spell toplevel 不是top-level
    • @g33kz0r 谢谢,已修复。
    【解决方案2】:

    我有很多 .tex 文件 vim spell 应该检查。尽管我所有的文件都非常相似(主要是常规句子)并且每个文件都以 .tex 结尾,但有时 vim 设置filetype=tex,有时设置filetype=plaintex。如果filetype=tex 那么vim spell 将不会检查我的拼写。如果filetype=plaintex 那么vim spell 将完全按照我的预期检查我的文本。

    我必须在我的 .vimrc 文件中创建一个映射来将一个键映射到 :set filetype=plaintex 这解决了我的问题,现在 vim 拼写检查文件就像我期望的那样,虽然我仍然不明白为什么 vim以一种方式识别我的一些文件,以另一种方式识别其他文件。

    【讨论】: