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 に答える