Sublime Text 原生不支持双击高亮 JSON 相同键名,因其无语义解析能力;需用 HighlightWords 插件配合 \bkey\b 正则实现可控全字高亮,并通过侧边栏批量管理或多条件筛选提升效率。

Sublime Text 本身不支持“双击高亮 JSON 中相同变量”这种行为——它没有针对 JSON 的语义级变量识别能力,所谓“变量”在 JSON 里只是键(key)或字符串值(value),没有作用域、声明或类型信息。你真正能做的,是用正则匹配 + 全字高亮,模拟出接近的效果。
为什么原生 double-click 不行
双击默认触发的是 Sublime 的 highlight_word 命令,它只做「当前光标下完整单词的纯文本全字匹配」,且完全不感知语法结构:
• 它会把 "user_id" 键、"user_id": "123" 的值、甚至注释里的 // user_id is deprecated 全部高亮
• 在 JSON 中,id 和 "id" 被视为不同文本,无法跨引号智能关联
• 它对嵌套对象、数组项、转义字符串(如 "name": "John \"Doe\"")完全无感
用 HighlightWords 插件加 \b 正则实现可控高亮
这是目前最贴近需求的实操路径,重点在「避误匹配」和「限作用域」:
- 先装插件:
Ctrl+Shift+P→Package Control: Install Package→ 输入HighlightWords(不是 WordHighlight 或 Highlighter) - 关掉原生高亮,避免冲突:
Preferences → Settings用户配置中加"highlight_word": false - 加词必须走命令面板:
Ctrl+Shift+P→HighlightWords: Add Word→ 输入\buser_id\b(\b是单词边界,排除user_id_v2或super_user_id) - 若只想高亮键名(不碰值),得手动筛选:先
Ctrl+F搜"\buser_id\b":,确认所有命中项都落在source.jsonscope 内,再加高亮;否则就接受它也会匹配值中的user_id字符串
JSON 文件里怎么让高亮只作用于 key 名
HighlightWords 本身不支持 scope 过滤,但你可以用 Sublime 的语法作用域规则间接控制:
- 打开一个 JSON 文件,把光标停在某个 key 上(比如
"cache_key"的cache_key部分) - 按
Ctrl+Alt+Shift+P(Windows/Linux)或Cmd+Alt+Shift+P(Mac),状态栏会显示类似source.json meta.structure.dictionary.json string.quoted.double.json - 这个
string.quoted.double.json就是 key 的专属 scope;而值的字符串通常是string.quoted.double.json同样 scope,所以无法靠 scope 完全分离——只能靠正则限定上下文,例如加"\bcache_key\b":而非单纯\bcache_key\b - 更稳妥的做法是:高亮后按
Ctrl+Shift+P→HighlightWords: Remove Word,逐个删掉误匹配的值或注释项,比重装插件快得多
侧边栏管理多个 JSON 关键路径更高效
链路分析时,你常要同时盯住 request_id → trace_id → span_id,一个个加太慢。HighlightWords 的侧边栏(Sidebar)能批量操作,但默认关闭:
- 启用方式:进插件设置(
Preferences → Package Settings → HighlightWords → Settings),加一行"show_sidebar": true - 重启后侧边栏底部会出现已高亮词列表,带颜色编号和开关按钮
- 点击某词可快速切换「全字匹配 / 忽略大小写 / 正则模式」,适合临时对比
ApiUrl和api_url - 注意:侧边栏不区分文件,全局高亮开启时,它会混着显示所有打开 JSON 文件里的词——如果只分析单个文件,务必提前设
"global_highlight": false
真正难的不是加高亮,而是判断哪些该高亮:JSON 里没有变量声明,"id" 可能是主键、外键、还是普通字段?靠颜色无法替代语义理解。建议把高亮当辅助索引,关键逻辑仍要结合 Ctrl+F 正则验证 + 手动折叠节点确认上下文。











