VSCode 本身不支持手动高亮选中代码块,需依赖插件;highlight-words 是唯一稳定支持跨语言、多色叠加、正则及精确控制的方案,但必须手动配置 colors、defaultMode 等参数才能生效。

VSCode 本身不提供“手动高亮任意选中代码块”的功能,必须靠插件实现;highlight-words 是目前唯一能稳定、跨语言、多色叠加、支持正则且可精确控制行为的方案。
highlight-words 必须手动配置才能生效
安装插件后直接选中文本按 Ctrl+H 没反应?不是插件坏了,是它默认完全禁用。VSCode 不会自动启用任何装饰类行为,所有高亮逻辑都依赖显式配置。
-
highlightwords.colors必须定义至少一对 light/dark 颜色,否则无高亮色可渲染 -
highlightwords.defaultMode要设为0(默认)、1(全词匹配)或3(全词+忽略大小写),否则Highlight Toggle Current不触发 -
highlightwords.box控制是否加边框——设为{"light": false, "dark": true}可在暗色主题下让高亮更醒目 - 配置必须写进
settings.json,用户设置和工作区设置都有效,但不能只靠 GUI 界面点选
为什么 Color Highlight 和 Bracket Pair Colorizer 不行
它们名字带“highlight”,但根本不是为“选中即高亮”设计的:
-
Color Highlight只扫描颜色字面量(如#3498db、rgba(0,0,0,0.5)),对变量名、函数调用、关键字完全无感 -
Bracket Pair Colorizer专盯括号配对,连console.log这种字符串都不会碰,更别说跨文件追踪相同变量了 - 两者都不响应
Ctrl+H或命令面板里的“Toggle”类指令,没有手动触发入口
支持所有语言的关键在于它不依赖语法解析
highlight-words 的高亮发生在编辑器渲染层,而非语言服务层。这意味着:
- 你在
.py、.ts、.vue、.json甚至纯文本.txt文件里选中user_id,它都能立刻高亮所有匹配项 - 不用写
tmLanguage.json,不涉及 TextMate 语法规则,也不需要启动语言服务器 - 正则模式(如
/console\.\w+/g)可跨行匹配,但注意:VSCode 默认不支持m(multiline)标志,^和$仍按单行处理 - 性能影响极小——它只对当前打开的编辑器应用装饰,不索引整个工作区
容易被忽略的边界行为
高亮不是“所见即所得”的简单涂色,几个实际开发中卡住过的点:
- 选中带空格的片段(如
const user =)时,默认模式不会全词匹配,得手动选"Highlight Selection with Options"并勾选“whole word” - 多次高亮同一词,颜色会按
colors数组顺序轮换,但取消时只能逐个删,Highlight Remove All会清空全部——没保存前慎用 - 侧边栏(
Highlight Toggle Sidebar)显示的是当前工作区所有高亮项,但点击删除只作用于当前编辑器,跨编辑器需分别操作 - 如果启用了
editor.wordSeparators自定义分隔符(比如把.去掉),会影响“whole word”匹配结果,此时建议用正则替代


















