按 Ctrl+Shift+P(macOS 为 Cmd+Shift+P)运行“Developer: Inspect Editor Tokens and Scopes”,右侧面板显示从具体到宽泛的作用域链,如 variable.other.readwrite.js → variable.other.js → variable.js → variable,优先选用最靠前、最具体的 scope。

怎么查变量当前的 TextMate scope
光标停在任意变量名上(比如 count、userList),按 Ctrl+Shift+P(macOS 是 Cmd+Shift+P),输入并运行 Developer: Inspect Editor Tokens and Scopes。右侧弹出的面板里会列出从具体到宽泛的作用域链,例如:variable.other.readwrite.js → variable.other.js → variable.js → variable。
优先选最靠前、最具体的 scope,比如想只改 JavaScript 里的可写变量,就用 variable.other.readwrite.js;如果想统一改所有语言的普通变量,用 variable 或 variable.other 更稳妥。
- Python 变量常用 scope:
variable、variable.other、variable.parameter(函数参数) - C++ 类成员变量可能落在
variable.member,局部变量可能是variable.local - scope 区分大小写,且不能带空格或引号外的符号(如
variable.other.js正确,variable other错误)
怎么在 settings.json 里配 variable 颜色
打开 Preferences: Open Settings (JSON),往 "editor.tokenColorCustomizations" 里加 "textMateRules" 规则。别直接往 workbench.colorCustomizations 里写——那管 UI,不管代码高亮。
示例:把所有语言的普通变量设为青绿色
"editor.tokenColorCustomizations": {
"textMateRules": [
{
"scope": ["variable", "variable.other"],
"settings": {
"foreground": "#26c6da"
}
}
]
}
-
scope支持数组,一次匹配多个作用域 - 颜色值必须是合法十六进制(如
"#26c6da")、rgb()或hsl(),不能写"blue"这类英文名 - 如果用了主题条件语法(如
"[One Dark Pro]": { ... }),确保括号内主题名和你当前激活的主题完全一致(含空格、大小写)
为什么改了没生效
常见原因不是配置错,而是被覆盖或没命中:
- 第三方主题(如 One Dark Pro、Dracula)自带完整的
tokenColors定义,会覆盖你写的部分规则,尤其当它定义了更具体的 scope(如variable.other.python)时 - 语言模式不对:文件右下角显示的是
Plain Text而不是Python或JavaScript,那variable.other.python就不会触发 - scope 写得太宽泛,被更早的 rule 拦截了——
textMateRules是从上到下匹配,第一条命中就停止 - 拼写错误:比如把
variable.other写成variables.other(多一个 s),VS Code 不报错,但不生效
不同语言变量要区别配色怎么办
可以按语言做条件化配置,不用写死在全局 settings.json 里:
- 在项目根目录建
.vscode/settings.json,只对当前项目生效 - 用语言专属 scope,比如 Python 函数参数:
variable.parameter.python;C++ 成员变量:variable.member.cpp - 配合
Developer: Inspect Editor Tokens and Scopes多点几个不同语言的变量,确认 scope 差异再下手
真正难的不是写几行 JSON,而是准确拿到那个「刚好够具体、又不会漏掉」的 scope —— 多试两次 Inspect 工具,比翻文档快得多。


















