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

8 vim spell-checking

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

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

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

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

Rob*_*obM 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
Run Code Online (Sandbox Code Playgroud)

改变pythonComment,python.*String你的语言。

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


DrA*_*rAl 4

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

hi link cCommentUnderscore cComment
syn match cCommentUnderscore display '\k\+_\w\+'
syn cluster cCommentGroup add=cCommentUnderscore
Run Code Online (Sandbox Code Playgroud)

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

  • 在使用这个改变很短一段时间后,我做了两个改进。首先,不要对单词开头或结尾带有 _ 的单词进行拼写检查。其次,不要使每个带有 _ 的单词按照注释着色。新行是:“syn match cCommentUnderscore 显示包含'_\k\+\|\k\+_\w*'” (2认同)