Vim拼写检查 - 仅在LaTeX文件中注释

28

我使用 gvim 编辑LaTex的 .tex 文件。我注意到它只对被注释的文本进行实时拼写检查。如果我的常规文本中有错误,就不会有下划线。但是如果我用 % 对这段文本进行注释,那么错别字会立即被下划线标出。这是怎么回事?是否开启了某些奇怪的选项?


这样的问题是否应该移至 http://tex.stackexchange.com/? - lindhe
1
在我的情况下,我是使用 input 从一个单独的文件中包含摘要的正文。我将 begin/end 标签放到了摘要文件中,现在它可以正常工作了。 - Paschalis
8个回答

17

LaTeX ft插件方便地定义了这种行为。

SpellChecker:拼写检查文本,包括LaTeX文档

使用latexmk、vim拼写检查和vim latex-suite

有一个选项似乎很接近:

:syntax spell [toplevel | notoplevel | default]

更新

同样地

:he ft-tex-syntax

它有一些非常有用的技巧,比如

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

你需要确定是否可以使用那个/从那里推断出来


1
谢谢你的提示。我不认为我使用任何插件。而且,它之前运行得很好,现在表现很奇怪。 - Jakub M.
1
如果你要玩“以前可以用”的游戏,很快就会有一个点,你只能自己找出改变了什么。否则,请查看这些资源,或者我将在第二个中添加额外的资源。 - sehe
1
let g:tex_comment_nospell=1 适用于我的 vim 7.3。适用于使用 % 注释的注释,但不适用于 comment 环境。http://tex.stackexchange.com/questions/9303/in-vim-how-to-enable-spellchecking-of-text-only-and-exclude-listings 似乎涵盖了后者。 - Ramashalanka

17

我曾经遇到过同样的问题(VIM 7.3),但是vim-latex-devel邮件列表中这篇帖子提供了线索。为了使拼写检查生效,我需要执行以下操作:

syntax spell toplevel

在我的~/.vimrc文件中,但它必须在之后声明
syntax enable

或者

syntax on

让它工作。


对我来说可以运行,但是在启动时会输出一个vimrc解析错误,提示toplevel不是一个有效选项: 在处理 /home/madanh/.vimrc 时检测到错误: 第 74 行: E518: 未知选项:toplevel - Hennadii Madan
好的,即使我只是简单地将“syntax spell”附加到我的.vimrc文件中,它也可以正常工作。现在没有错误了。 - Hennadii Madan
在我的Vim 7.4中有效。 - lindhe

5
我不知道这是否是一种粗糙的方法和预期的解决方案,但我创建了一个名为 .vim/after/syntax/tex.vim 的文件,其中包含单行代码:

syn match texText "\<\w\+\>" contains=@Spell

现在vim进行拼写检查时,会检查命令和传递参数的文本之间的普通文本,因为您无法在语法上对它们进行区分。
\frametitle{TextToBeChecked}
\pgfuseimage{VariableNotToBeChecked}

因此,在我的导言部分它检查了太多内容。但我已经将其放在另一个文件中,所以我并不在意。

3
在处理由主文档包含的文件时,经常会出现此问题。
如果您要打开一个将被包含且不包含章节、章节、\begin{document}等内容的TeX文件,则可以在文件顶部添加%begin-include来标记它。这样,vim将识别文件内容作为texDocZone区域的一部分,从而启用拼写检查。
使用%end-include来设置texDocZone的结束位置。
尽管该行为似乎未被记录,但它已在vim语法文件中进行了描述:https://github.com/vim/vim/blob/master/runtime/syntax/tex.vim 简而言之:在您的TeX文件顶部添加%begin-include

0
我发现了同样的问题,但是有不同的解决方案。在一些 .tex 文件中,拼写检查按预期工作,而在其他文件中却不行(documentclass{scrlttr2})。只有在注释中才会有单词被下划线标出...因此,我比较了一个正常工作和一个不正常工作的 .tex 文档的头部。我发现了一个令人惊讶的 texblock,在文档本身中阻碍了拼写检查:
\usepackage{array}
\newenvironment{Conditio}
  {\par\vspace{\abovedisplayskip}\noindent\begin{tabular}{>{$}l<{$} @{${}={}$} l}}
  {\end{tabular}\par\vspace{\belowdisplayskip}}

这段代码只是之前我编辑过的另一份法律文件的“遗留物”。将其注释掉后,在信件文档中设置了正常的拼写检查,高亮显示文本。(MacVim 8.1 latex-suite macOS 10.13.6 vim-latex v1.10.0)


很有趣。我又遇到了这个问题,但忘记了几个月前给出的答案。突然我意识到,这个(有效的)答案是我自己写的!在上面的评论中有一个令人尴尬的英语错误:想说“剩菜”,而不是“宿醉”... - Marek Stepanek

0

我遇到了同样的问题 - 我书的第一章的.tex文件可以正常进行拼写检查,但第二章的文件只能对注释进行拼写检查。这似乎是因为vim没有查看足够的上下文行数而导致混淆。Ingo Karkat的解决方案在这里对我很有帮助。具体来说,我使用了:

syn sync maxlines=2000
syn sync minlines=500

在 ~/.vim/after/syntax/tex.vim 中


0

tldr; 不要在主 .tex 文档中放置 \section 命令

我也注意到了同样的问题,并且我坚持认为“之前它可以工作,而我没有改变任何东西”。

然后我观察到,这种不良行为只发生在我有一个 master.tex.tex 文档中,该文档将章节作为单独的 chapterx.tex 文件包含进来。此外,如果所有的 \section 定义都在 chapterx.tex 中而不是master.tex 中,则一切正常。

否则,我认为,vim 语法和拼写检查例程很难确定它们所处的区域,参见此问题 Vim spellcheck not always working in .tex file. Check region in Vim


0

这里的所有答案都对我没用,但是我发现如果在vim中键入syntax spell作为命令,它会起作用。

事实证明,这是因为tex文件类型的语法没有自动设置,我在这里找到了解决方案。

vim只在TeX注释中拼写检查

使用vim编辑LaTeX文档时,我注意到它只对注释进行拼写检查。我通过将以下内容添加到我的./vimrc中来解决这个问题:

autocmd FileType plaintex,tex,latex syntax spell toplevel


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