这个问题是这个问题的后续问题。我有以下脚本从 vim 拼写检查中删除大写单词。
syn match myExCapitalWords +\<\w*[A-Z]\K*\>+ contains=@NoSpell
但只有我先做才有效syn clear
。但随后所有其他突出显示(例如降价)都会丢失。我syn list
查看了可能导致冲突的原因,但现在我一无所知。
这个问题是这个问题的后续问题。我有以下脚本从 vim 拼写检查中删除大写单词。
syn match myExCapitalWords +\<\w*[A-Z]\K*\>+ contains=@NoSpell
但只有我先做才有效syn clear
。但随后所有其他突出显示(例如降价)都会丢失。我syn list
查看了可能导致冲突的原因,但现在我一无所知。
看起来您正在使用您的myExCapitalWords
组扩展任意语法。是否/在哪些语法项中起作用取决于底层语法。不幸的是,不可能以全面的方式扩展任意语法。这就是为什么您会看到只能通过:syn clear
(摆脱底层语法)解决的问题。
一个语法包含多个组,其中一些通常contained=
在其他组中。如果您引入新语法,它将仅适用于没有其他语法组已经匹配的地方。containedin=TOP
您可以通过甚至强制您的组进入其他组containedin=ALL
,但该叠加可能会阻止其他原始组匹配,并导致奇怪的效果,因为他们自己的contains=
或nextgroup=
现在不适用。
因此,不幸的是,没有通用的解决方案。如果您只对几种语法感兴趣,您可以调整您的单行代码以使其与底层语法(例如 try containedin={syntaxName}Comment{s}
)配合,但没有普遍适用的解决方案。