我喜欢vim 7.0支持拼写检查:set spell,我喜欢它默认只检查我的C代码中的注释和文本字符串。但我想找到一种改变行为的方法,以便vim知道当我写下包含下划线的单词时,我不希望检查单词拼写。
问题是我经常在我的评论中引用变量或函数名称,所以现在vim认为每个不完整正确单词的文本都是拼写错误。例如
/* The variable proj_abc_ptr is used in function do_func_stuff' */
大多数情况下,由下划线分隔的部分是完整的单词,但有时候它们是我不希望添加到单词列表中的缩写。是否有任何全局方式告诉vim在拼写检查时将_作为单词的一部分包含在内?
答案 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
会覆盖任何和所有继承的组,从而告诉拼写检查器跳过匹配的文本。