highlight-words是唯一靠谱的选择,因其专为手动触发、多色叠加、跨文件高亮设计,支持全词匹配与正则模式,且必须显式配置colors、defaultmode和box等参数才能生效。

VSCode 本身不提供“选中即高亮”的开箱即用功能,必须靠插件实现;highlight-words 是唯一能稳定支持手动触发、多色叠加、跨文件匹配的方案,其他插件如 Color Highlight 或 Bracket Pair Colorizer 都不满足这个核心需求。
为什么 highlight-words 是唯一靠谱的选择
Color Highlight 只识别颜色值(如 #ff6b6b、rgb(255, 107, 107)),Bracket Pair Colorizer 只管括号配对。而你要的是“选中一个变量名,全文所有同名位置都高亮”——这只能由 highlight-words 实现。
- 它不依赖语言模式,
JS/TS/VUE/HTML/JSON全支持 - 高亮带背景色 + 可选边框,视觉上不会被语法高亮淹没
- 支持全词匹配、忽略大小写、正则模式(比如高亮所有
console.log调用) - 快捷键绑定后,
Ctrl+Shift+H一键高亮当前选中词,再按一次取消
highlight-words 必须显式配置才能生效
只安装插件不配置,highlight-words 默认是哑火状态。必须在 settings.json 中添加以下字段:
{
"highlightwords.colors": [
{"light":"#b3d9ff","dark":"#4a90e2"},
{"light":"#e6ffb3","dark":"#7ed321"}
],
"highlightwords.defaultMode": 3,
"highlightwords.box": {"light": true,"dark": false},
"highlightwords.showSidebar": false
}
-
highlightwords.colors至少保留 2 组颜色,否则高亮可能不显示(插件有最小颜色数校验) -
highlightwords.defaultMode: 3表示“全词 + 忽略大小写”,避免选中map却高亮了flatMap -
highlightwords.box.dark: false是关键:深色主题下若设为true,边框会和背景融合,看起来像没高亮 -
highlightwords.showSidebar: false建议关闭,否则左侧资源管理器里多出HIGHLIGHTS栏,干扰导航
快捷键冲突与调试技巧
插件默认无快捷键,需手动绑定。常见问题不是“按了没反应”,而是快捷键被其他插件劫持或未生效:
- 打开快捷键设置:
Ctrl+K Ctrl+S→ 搜索Highlight Toggle Current→ 双击右侧空白处绑定,推荐Ctrl+Shift+H - 如果绑定后仍无效,检查是否被
Auto Rename Tag或Prettier的快捷键覆盖(它们常抢占Ctrl+Shift+X类组合) - 高亮后光标移走就消失?这是正常行为 ——
highlight-words默认只高亮当前编辑器中的匹配项,不跨编辑器持续 - 想跨文件高亮,需确保所有目标文件已打开,且未启用
highlightwords.onlyInActiveEditor(该选项默认为false)
Color Highlight 插件只干一件事:渲染颜色值色块
如果你要的是 CSS/SCSS/HTML 中 #3498db、hsl(200, 100%, 50%)、var(--primary-color) 这类颜色代码旁出现对应色块,那 Color Highlight 就是专为此生的。
- 它不识别变量名、函数名或任意文本,只认标准颜色语法
- 若色块不显示,先确认右下角语言模式是否为
CSS/SCSS/HTML;若显示Plain Text,点击切换 - 想让注释里的颜色也渲染,设置
colorHighlight.showColorsInComment为true - 想支持自定义属性如
var(--bg),需在colorHighlight.colors中加正则规则:{"pattern": "var\(--bg\)", "color": "var(--bg)"}
真正容易被忽略的是:高亮逻辑分两层——语法高亮(token 级)和语义高亮(semantic token 级)。前者靠 TextMate 规则,后者靠 Language Server。你调的 highlight-words 和 Color Highlight 都属于前者,它们互不干扰,但也不能替代后者。比如想高亮某个变量的所有引用(含重命名、解构、类型声明),就得靠 TypeScript Server 提供的语义能力,而不是插件。











