最准查 scope 名称的方法是:光标停在目标元素上,按 ctrl+shift+p 执行 “developer: inspect editor tokens and scopes”,从列出的 scope 链中优先选用最靠前、带语言后缀(如 keyword.control.js)的具体 scope,避免使用过泛名称(如 keyword)导致跨语言误改。

直接改 settings.json 里的 editor.tokenColorCustomizations 是最轻量、最安全的方案,不需要动主题文件、不依赖打包发布,改错立刻可逆。
怎么查准 scope 名称而不是瞎猜
VSCode 自己就能告诉你光标所在位置的真实作用域。打开任意代码文件,把光标停在你想改色的元素上(比如一个函数名),然后按 Ctrl+Shift+P 输入 “Developer: Inspect Editor Tokens and Scopes” 并执行。面板里会列出当前 token 的完整 scope 链,从最具体到最宽泛,例如:support.function.dom.js → support.function.js → support.function。
- 优先选最靠前、带语言后缀的 scope(如
keyword.control.js),避免误影响其他语言 - 别用太泛的 scope(如只写
keyword),否则 Python 的def、JS 的if全被一起改了 - 如果 inspect 出来是
variable.other.readwrite.ts,说明你正在 TypeScript 文件里——换到 .py 文件里 scope 就可能变成variable.other.python
textMateRules 和 semanticTokenColors 到底该用哪个
textMateRules 管语法结构(靠正则匹配),semanticTokenColors 管语义类型(靠语言服务器提供类型信息)。两者不互斥,但生效逻辑不同:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
-
textMateRules在所有语言下都起作用,哪怕没装对应语言扩展;适合改注释、字符串、括号这类纯文本结构 -
semanticTokenColors必须开启"editor.semanticHighlighting.enabled": true,且依赖语言服务器返回数据;适合区分function和method、interface和type这类仅靠语法无法判断的元素 - 如果同时配置了相同 token 类型(比如都设了
function),semanticTokenColors优先级更高
示例:想让 JS 函数名加粗但不改 TS 接口名,就用 textMateRules 配 support.function.js;想让所有语言的函数名统一带下划线,就用 semanticTokenColors 配 function。
为什么改了颜色却没生效
常见失效原因不是配置写错,而是被更高优先级规则覆盖或条件未满足:
- 确认当前文件右下角显示的语言模式正确(比如是
JavaScript而非Plain Text) - 检查是否启用了第三方主题——很多主题自带
tokenColors,会覆盖editor.tokenColorCustomizations的部分规则 -
workbench.colorCustomizations里不能写语法高亮相关配置,它只管 UI 区域(侧边栏、状态栏等),写了也无效 - 如果用了
semanticTokenColors却没反应,先确认对应语言扩展已安装且 LSP 正常工作(看右下角有没有“Loading…”或报错图标)
真正难的不是写对那几行 JSON,而是理解 scope 的层级继承关系和语义高亮的触发边界——inspect 工具要多点几次,不同语言文件要分别验证,改完记得切回普通文件看看有没有意外波及。










