如何在Vim拼写检查中更改单词识别?

11
我喜欢 Vim 7.0 通过 :set spell 支持拼写检查,我也喜欢它默认只检查 C 代码中的注释和文本字符串。但是我想找到一种方法来更改这个行为,让 Vim 知道当我写包含下划线的单词时,我不想将该单词拼写检查。
问题在于,我经常在注释中引用变量或函数名称,所以现在 Vim 认为每个不完整正确的单词都是一个拼写错误。例如:
/* The variable proj_abc_ptr is used in function do_func_stuff' */
大多数情况下,用下划线分隔的部分是完整的单词,但有时它们是缩写词,我宁愿不将它们添加到单词列表中。是否有一种全局方法告诉 Vim 在拼写检查中将下划线作为单词的一部分?
2个回答

5
以下是一些常规的拼写检查例外规则,可放置在.vim/after/syntax/{LANG}.vim文件中:

这句话的意思是在{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覆盖任何和所有继承的组,从而告诉拼写检查器跳过匹配的文本。

4

您需要将它移动到自己的组中。类似这样:

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

在一些代码高亮器中,你可能需要在匹配行的末尾加上contains=@NoSpell,但在C语言中,默认为@NoSpell,所以像这样应该就可以了。


非常好用!非常感谢。我要添加一个评论:我最初试图将它放在我的 .vimrc 文件中,但那里没起作用。在查看了 :syn 帮助文档之后,我发现为了让这个语法高亮更改每次加载 C 语法时都能使用,我需要将这些行放入 ~/.vim/after/syntax/c.vim 文件中。这样做后,一切都很顺利。 - user156517
2
使用这个更改一段时间后,我进行了两次改进。首先,不对单词开头或结尾带有_的单词进行拼写检查。其次,不会导致每个包含_的单词都按照注释中的颜色进行着色。新行为:“syn match cCommentUnderscore display '_\k+|\k+_\w*' contained” - user156517

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