Vim拼写检查在.tex文件中不总是起作用。 在Vim中检查区域。

40
我使用Vim来写我的.tex文件,但是我在Vim的拼写检查上遇到了麻烦。有时它不会检查单词,我认为这可能是以下原因之一。
由于Vim显然不应该检查.tex文档中的所有单词,例如不包括导言部分,它只检查某些区域(从语法角度来看)的拼写。正如我从这里获得的信息,其中之一是texSectionZone。这些区域可能会变得非常大,事实上,一个章节通常就很大,因此Vim很难意识到它实际上处于texSectionZone区域(或其他任何区域),因此不会检查拼写。如果我在文档中进行搜索或跳过多行(或者说多页),就会发生这种情况。
我得出这个推断的方式是:我知道命令
:echo synIDattr(synID(line("."),col("."),1),"name")

打印你所在的区域/区域的名称(我在这里找到了here),因此当拼写检查器无法工作时,我尝试了这个方法,并且它告诉我它根本不在任何区域内。它有效的地方,我在应该检查拼写的区域。

到目前为止,我的唯一解决方案是找到我想要拼写检查程序检查的位置上面最近的部分,然后手动将光标移回给定点。

理想情况下,我非常希望有一个解决方案,确保不会发生这种情况,但我也可以接受一种方式,手动使vim“更新”其所在的区域,而不必让我移动光标很多次。在后一种情况下,我考虑一个可以制作成快捷方式的解决方案。

PS 我对如何称呼这个问题感到疑惑。如果您能想出一个更好地解释问题的标题,请随意更改。

3个回答

62

在vim没有定义语法分组(或找到)的地方不会执行拼写检查。我发现即使对于未定义的分组启用拼写检查也非常有用(请参见vim语法文档中的)。

要这样做,请输入以下命令:

syntax spell toplevel

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


2
可能很明显,但是我被卡住了;在此之前必须使用 set spell 才能正常工作。 - Justapigeon
我在处理tex文件时没有问题,但使用yacc时有问题。谢谢!另外,当你设置拼写选项后(正如@Justapigeon所提到的),你当然不需要这个特殊的文件。你也可以将它放在你的.vimrc文件中。我不知道在.vimrc中这样做是否会引起其他问题或者不是最好的方法,但对我来说,它很好用 - 至少乍一看是这样。但是,这可能会在我不想拼写检查的文件中变得烦人。无论如何,感谢这些提示! - Pryftan
我把 autocmd FileType tex syntax spell toplevel 这行添加到了我的 .vimrc 文件中,效果很好。谢谢! - Roshan Sam

22

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,它是否会从文档开头开始更新语法一次,还是告诉 Vim 它应该始终从开头进行语法同步? - Kristian
1
后者;如果这不会使Vim变得太慢,请坚持使用它! - Ingo Karkat
好的。在网络上大多数人建议时,他们让它听起来好像只需要一次就可以了。如果我运行 :syn sync maxlines=200:syn sync minlines=50,然后再将其设置回正常值(默认值),是否可以呢? - Kristian
这只需要设置一次,最好在我的答案中提到的“_after_”目录中设置。 - Ingo Karkat

0

我手动设置文件类型:set filetype=plaintex,然后vim的拼写检查功能在我的.tex文档(即LaTeX文件)中非常有效。我的许多.tex文件会自动识别为filetype=tex,当发生这种情况时,即使大部分文字都是英语句子,经常是整个段落,而没有任何LaTeX语法,vim的spell也不会检查单词的拼写。我还发现,我可以设置文件类型:set filetype=latex,但我的一些自定义命令\dosomething无法被识别为语法,并且它们没有得到特殊的字体颜色。所以我手动地使用:set filetype=plaintex,至少我可以将自定义的LaTeX命令的字体颜色设置为特殊颜色。


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