【问题标题】:removing spell syntax highlighting in vim删除 vim 中的拼写语法高亮显示
【发布时间】:2013-09-20 17:00:26
【问题描述】:

本题是this one的续题。我有以下脚本从 vim 拼写检查中删除大写单词。

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

但只有当我先做syn clear 时它才有效。但随后所有其他突出显示(例如降价)都会丢失。我通过syn list 查看可能导致冲突的原因,但现在我一无所知。

【问题讨论】:

    标签: vim syntax-highlighting spell-checking


    【解决方案1】:

    看起来您正在使用 myExCapitalWords 组扩展任意语法。是否/在哪些语法项中起作用取决于底层语法。不幸的是,不可能以全面的方式扩展任意语法。这就是为什么您会看到只能通过:syn clear 解决的问题(它摆脱了底层语法)。

    一个语法包含多个组,其中一些通常是contained=,而另一些通常是contained=。如果您引入新语法,它将仅适用于没有其他语法组已经匹配的地方。您可以通过containedin=TOP 甚至containedin=ALL 强制您的组进入其他组,但这种叠加可能会阻止其他原始组匹配,并导致奇怪的效果,因为他们自己的contains=nextgroup= 现在不适用。

    因此,很遗憾,对此没有通用的解决方案。如果您只对几种语法感兴趣,您可以调整您的单行代码以使其与底层语法配合(例如尝试containedin={syntaxName}Comment{s}),但没有普遍适用的解决方案。

    【讨论】:

    • 因此,即使我花费大量时间来完成这项工作,如果由于新插件导致语法突出显示发生更改,它也会中断,对吧?我猜如果有一个不使用syn 的解决方案你早就告诉我了。谢谢 Ingo,一如既往,一个很好的答案。
    • 如果你的意思是“新插件”的新插件版本,我不会太担心。大多数都很稳定。不过,您需要适应其他语言/文件类型。
    • matchadd() 替代语法,但在这种情况下它不起作用(无论如何应用起来很麻烦),因为拼写检查连接到 syn,不幸的是。跨度>
    猜你喜欢
    • 2016-05-07
    • 2010-09-08
    • 2016-08-16
    • 2015-04-24
    • 2012-12-04
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多