如何在vim法术中改变单词识别?

时间:2009-08-14 13:58:49

标签: vim spell-checking

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

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

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

大多数情况下,由下划线分隔的部分是完整的单词,但有时候它们是我不希望添加到单词列表中的缩写。是否有任何全局方式告诉vim在拼写检查时将_作为单词的一部分包含在内?

2 个答案:

答案 0 :(得分:4)

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

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

在某些荧光笔中,您可能需要在匹配行的末尾contains=@NoSpell,但在C中,默认值为@NoSpell,所以它应该是这样的。

答案 1 :(得分:2)

以下是一些更常用的拼写检查例外规则,可放入.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会覆盖任何和所有继承的组,从而告诉拼写检查器跳过匹配的文本。