直接改editor.tokenColorCustomizations就能生效,但多数人配后无反应,根本原因是scope未被语言插件实际生成、配置位置错误(须在settings.json根级)、或被第三方主题覆盖;必须用Developer: Inspect Editor Tokens and Scopes精准获取真实scope(如storage.modifier.verilog),再严格按大小写和点号顺序填入textMateRules。

editor.tokenColorCustomizations 配置能直接改颜色,但效果常不如预期——因为 VSCode 的高亮依赖两层机制:TextMate 语法定义(分词) + 主题 token 映射(着色)。只调颜色,不改 scope,等于在错误的分类上涂漆。
为什么改了 editor.tokenColorCustomizations 没反应?
常见现象是:写了一堆 keyword、string 规则,但 input/output 还是灰色,函数名没变蓝。原因很直接:你配的 scope 名根本没被当前语言插件生成出来。
- Verilog 插件把
input标为storage.modifier.verilog,不是keyword - TypeScript 插件把解构变量标为
variable.other.readwrite.ts,不是variable - 主题默认只映射了最宽泛的 scope(如
keyword),细粒度 scope(如keyword.control.js)往往没定义样式
解决办法只有一个:先用 Help → Toggle Developer Tools,再打开 Inspect Editor Tokens,把光标停在目标词上,看真实 scope 是什么,再照着填进 textMateRules。
如何让 Verilog 的 input/output 高亮更醒目?
很多 Verilog 插件(比如 Verilog-HDL/SystemVerilog)默认把端口关键字标为 storage.modifier.verilog,而这个 scope 在多数主题里跟普通标识符一样灰。想改,得精准匹配:
- 打开任意 .v 文件,把光标停在
input上 - 按
Ctrl+Shift+P→ 输入Developer: Inspect Editor Tokens→ 回车 - 确认显示的 scope 是
storage.modifier.verilog(或类似变体) - 在
settings.json中加这条规则:
{
"editor.tokenColorCustomizations": {
"textMateRules": [
{
"scope": "storage.modifier.verilog",
"settings": {
"foreground": "#FF6B6B",
"fontStyle": "bold"
}
}
]
}
}
注意:别用 storage.type 或 keyword 替代——它们不生效。scope 必须完全一致,大小写、点号、顺序都不能错。
多个插件冲突时,谁控制高亮?
VSCode 不按安装顺序选插件,而是按 package.json 里的 contributes.languages 声明优先级。比如你同时装了 Verilog-HDL 和 vscode-systemverilog,后者若声明了 "id": "systemverilog" 并把 .v 文件关联到它,那 .v 就走它的语法定义,哪怕你只想用前者的 lint 功能。
- 检查当前文件实际使用的语言模式:右下角状态栏看是不是显示
Verilog还是SystemVerilog - 强制指定语言模式:在
settings.json加"files.associations",例如:"*.v": "systemverilog" - 想彻底禁用某插件的高亮能力?删掉它
package.json里的"grammars"字段(需修改插件源码,重启生效)
改完记得重载窗口,否则新关联不生效。
自定义 tmLanguage.json 时最容易踩的坑
直接改插件自带的 verilog.tmLanguage.json 看似一劳永逸,但升级插件就会覆盖。真要动语法定义,得走“复制-重命名-注册”流程:
- 把原插件的
syntaxes/verilog.tmLanguage.json复制到自己项目根目录下的.vscode/verilog-custom.tmLanguage.json - 修改其中的
"scopeName"为source.verilog.custom(不能重复) - 在 workspace 的
settings.json里加:"files.associations": {"*.v": "verilog-custom"} - 再通过
contributes.grammars在本地 extension 或 settings 里注册该语法(需额外配置)
没走完整流程就改 JSON,VSCode 根本不认——它只加载插件或 workspace 显式声明的语法文件,不会扫描任意路径下的 .tmLanguage.json。


















