9

我喜欢 vim 7.0 通过 :set spell 支持拼写检查,而且我喜欢它默认只检查我的 C 代码中的注释和文本字符串。但我想找到一种方法来改变行为,以便 vim 知道当我写包含下划线的单词时,我不想检查那个单词的拼写。

问题是我经常会在我的注释中引用变量或函数名称,所以现在 vim 认为每一个不是完全正确单词的文本都是拼写错误。例如。

/* The variable proj_abc_ptr is used in function do_func_stuff' */

大多数时候,下划线分隔的部分是完整的单词,但其他时候它们是我不想添加到单词列表中的缩写词。有没有什么全局方法可以告诉 vim 在拼写检查时将 _ 作为单词的一部分包含在内?

4

2 回答 2

5

以下是一些更通用的拼写检查异常规则,可放入.vim/after/syntax/{LANG}.vim文件中:

" Disable spell-checking of bizarre words:
"  - Mixed alpha / numeric
"  - Mixed case (starting upper) / All upper
"  - Mixed case (starting lower)
"  - Contains strange character
syn match spellingException "\<\w*\d[\d\w]*\>"      transparent contained containedin=pythonComment,python.*String contains=@NoSpell
syn match spellingException "\<\(\u\l*\)\{2,}\>"    transparent contained containedin=pythonComment,python.*String contains=@NoSpell
syn match spellingException "\<\(\l\+\u\+\)\+\l*\>" transparent contained containedin=pythonComment,python.*String contains=@NoSpell
syn match spellingException "\S*[/\\_`]\S*"         transparent contained containedin=pythonComment,python.*String contains=@NoSpell

更改pythonComment,python.*String为您的语言。

  • transparent意味着匹配从包含块继承其突出显示属性(即这些规则不会改变文本的显示方式)。
  • contained防止这些匹配超出包含块(最后一条规则以\S*可能匹配超出块末尾的规则结尾)
  • containedin包含现有语法组的列表以添加这些新规则。
  • contains=@NoSpell覆盖任何和所有继承的组,从而告诉拼写检查器跳过匹配的文本。
于 2010-06-01T20:09:48.617 回答
4

您需要将其移动到自己的组中。像这样的东西:

hi link cCommentUnderscore cComment
syn match cCommentUnderscore display '\k\+_\w\+'
syn cluster cCommentGroup add=cCommentUnderscore

在某些荧光笔中,您可能需要contains=@NoSpell在匹配线的末尾,但在 C 中,默认值为@NoSpell,所以应该没问题。

于 2009-08-14T18:48:09.513 回答