1

这个问题是这个问题的后续问题。我有以下脚本从 vim 拼写检查中删除大写单词。

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

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

4

1 回答 1

1

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

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

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

于 2013-09-20T09:00:26.697 回答