从语法簇中删除@Spell

Remove @Spell from a syntax cluster

我正在使用 vim-polyglot 插件。在 JavaScript 文件类型插件文件中,它配置 Vim 到 运行 字符串拼写检查。在浏览了插件的实现后,我可以看到它针对以下语法集群执行此操作:

Here's集群定义示例:

syntax region  jsString           start=+\z(["']\)+  skip=+\\%(\z1\|$\)+  end=+\z1+ end=+$+  contains=jsSpecial,@Spell extend

我尝试将下面的行添加到 ~/.config/nvim/init.vim 以及 ~/.config.nvim/ftplugins/javascript.vim,但似乎都没有删除拼写:

syntax cluster jsString remove=@Spell
syntax cluster jsTemplateString remove=@Spell
syntax cluster jsObjectKeyString remove=@Spell
syntax cluster jsObjectStringKey remove=@Spell

如何从 vim-polyglot 提供的 select 语法高亮组中删除拼写?

这些并不是真正的语法 clusters,而只是语法 items.

虽然 @Spell@NoSpell 语法簇,但重要的是它们包含的位置而不是它们包含的真正项目,因此我们可以'真正使用 syntax cluster 来修改那些并为现有语法项启用或拼写...

所以最好的办法是重新定义语法项,删除其中的 @Spell 部分。

您只能重新定义这 4 项,但没有真正好的方法可以只修改部分命令(只需删除 @Spell 部分),您最终不得不从头开始重新设置它们,这意味着您必须从原始文件中复制它们的定义,然后进行修改。

要添加到现有语法文件,请参阅 :help mysyntaxfile-add

简而言之,您应该创建一个 ~/.vim/after/syntax/javascript.vim,其内容为:

syntax clear jsString
syntax clear jsTemplateString
syntax clear jsObjectKeyString
syntax clear jsObjectStringKey
syntax region  jsString           start=+\z(["']\)+  skip=+\\%(\z1\|$\)+  end=+\z1+ end=+$+  contains=jsSpecial extend
syntax region  jsTemplateString   start=+`+  skip=+\`+  end=+`+     contains=jsTemplateExpression,jsSpecial extend
syntax region  jsObjectKeyString   contained start=+\z(["']\)+  skip=+\\%(\z1\|$\)+  end=+\z1\|$+  contains=jsSpecial skipwhite skipempty nextgroup=jsObjectValue
syntax region  jsObjectStringKey   contained start=+\z(["']\)+  skip=+\\%(\z1\|$\)+  end=+\z1\|$+  contains=jsSpecial extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue

这些命令将首先清除语法项,然后重新定义它们,但这次不包括 contains=@Spell 部分,因此它们不会为这些规则启用拼写检查。