如何在Vim中排除大写单词的拼写检查?

14

要翻译的内容:

有太多的首字母缩写和专有名词需要添加到字典中。我希望任何包含大写字母的单词都不会被拼写检查器检查。单词由空格或特殊字符(即非字母字符)分隔。这是否可能?

当小写字母和特殊字符环绕着大写字母时,答案的第一部分会失败:

,jQuery,
, iPad,
/demoMRdogood/
[CSS](css)
`appendTo()`,

当前答案存在误判(排除拼写检查)的问题,当小写单词以特殊字符为分隔符时。以下是例子:
(async)
leetcode, eulerproject, 

这个悬赏是为了解决这个问题的人提供的。

你能举出大写单词的例子吗?因为似乎你不喜欢已经给出的答案。它确实做到了你想要的。(即所有以大写字母开头的单词),或者至少第一个单词是这样的。 - FDinoff
好的,我稍微修改了问题。我已经包括了当前答案无法解决的情况。 - Forethinker
第一个有什么问题?:syn match myExCapitalWords +\<[A-Z]\w*\>+ contains=@NoSpell 这句话的意思是所有这些单词都拼写错误。 - FDinoff
我添加了第一个失败的情况。抱歉,我知道我似乎很挑剔,但我想要一个完美的解决方案。我会添加更多的情况。 - Forethinker
2个回答

12
您可以尝试使用以下命令:
:syn match myExCapitalWords +\<[A-Z]\w*\>+ contains=@NoSpell

上述命令指示Vim将由\<[A-Z]\w*\>描述的每个模式处理为@NoSpell群集的一部分。 @NoSpell群集中的项目不会进行拼写检查。
如果您希望进一步排除所有包含至少一个非字母字符的单词进行拼写检查,可以调用以下命令:
:syn match myExNonWords +\<\p*[^A-Za-z \t]\p*\>+ contains=@NoSpell

输入:h spell-syntax以获取更多信息。


这对我来说几乎可以工作。如果单词前后有非字母字符,拼写检查仍然会启动。我尝试为之前和之后的非字母字符设置条件,但它并没有按照我期望的那样工作。如果我去掉“单词开头”或“单词结尾”的标记,匹配就完全不起作用了。 - Forethinker
1
能否将此方法扩展,使得不匹配句子开头的单词?我尝试使用 +\v(\. )@!<\u\w*>+,但它没有起作用。 - nijoakim

6

这是对我有效的解决方案。它通过了我在问题中提到的案例:

syn match myExCapitalWords +\<\w*[A-Z]\K*\>+ contains=@NoSpell

这里有一个替代方案,使用\S而不是\K。这个替代方案排除了括号中在大写字母之前的字符。由于更加宽松,因此对URL的处理效果更好:

syn match myExCapitalWords +\<\w*[A-Z]\S*\>+ contains=@NoSpell

排除拼写检查中的“'s”

无论采用上述解决方案如何,撇号后面的字母 “s” 都会被视为拼写错误。一个快速解决方法是将“s”添加到您的词典中,或对其进行特殊处理:

syn match myExCapitalWords +\<\w*[A-Z]\K*\>\|'s+ contains=@NoSpell

这不是问题的一部分,但这是拼写检查过程中的常见情况,所以我在这里提到了它。

如果我在.c文件中使用这个命令,它会移除字符串的语法高亮,通常在C代码中,字符串会以不同的颜色显示,但是如果我使用上述vim命令,则会移除该代码的语法高亮! - takladev

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