问题 从Vim Spell检查中排除大写单词


有太多的首字母缩略词和专有名词可以添加到字典中。我想任何包含大写字母的单词都要从拼写检查中排除。单词由空格或特殊字符(即非字母表)分隔。这可能吗?

当小写字母和特殊字符围绕大写单词时,答案的第一部分失败:

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

当小写单词由特殊字符分隔时,当前答案会给出误报(从拼写检查中排除)。以下是示例:

(async)
leetcode, eulerproject, 

赏金是针对解决此问题的人。


12189
2017-08-12 20:45


起源

你能举出大写单词的例子吗?因为看起来你不喜欢已经给出的答案。它做你想要的。 (即所有以大写字母开头的单词)或至少第一个单词。 - FDinoff
好的,我稍微改了一下这个问题。我已经包含了当前答案失败的情况。 - Forethinker
第一个问题出了什么问题? :syn match myExCapitalWords +\<[A-Z]\w*\>+ contains=@NoSpell 这说明所有这些拼写错了。 - FDinoff
我添加了第一个失败的情况。对不起,我知道我似乎在挑剔,但我想要一个完美的解决方案。我会添加更多案例。 - Forethinker


答案:


你可以尝试这个

: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 了解更多信息。


11
2017-08-12 21:00



这几乎适合我。如果单词之前或之后有一个非字母字符,拼写检查仍然会开始。我试图在前后对非字母字符设置条件,但它没有按照我的预期工作。如果我拿走“单词的开头”或“单词结尾”标记,则匹配根本不起作用。 - Forethinker
我根据你的需要更新了我的答案 - user1146332
是否可以扩展这一点,使句子开头的单词不匹配?我试过了 +\v(\. )@!<\u\w*>+,但它没有用。 - nijoakim


这是适合我的解决方案。这传递了我在问题中提到的案例:

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

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


4
2017-08-23 21:58