最常见原因是editor.selectionHighlight被关闭或主题将editor.wordHighlightStrongBackground设为transparent;需启用该选项、设置带alpha的高亮色(如#5a5a5a55)、并确保语言模式非Plain Text。

为什么选中单词后其他位置没反应
最常见原因是 editor.selectionHighlight 被关了,或者主题把高亮色设成透明。VSCode 默认开启这个功能,但 One Dark Pro、Nord 等主流深色主题会把 editor.wordHighlightStrongBackground 设为 transparent——逻辑在跑,颜色被吃掉了,看起来像“失效”。
- 打开设置(
Ctrl+,或Cmd+,),搜selection highlight,确认Editor > Selection Highlight已勾选 - 右下角语言标识必须是
JavaScript、TypeScript等有效语言模式,不能是Plain Text - 临时切回 VS Code 自带的
Dark+主题验证:如果这时能高亮,基本就是当前主题覆盖了配置
怎么让高亮真正显示出来
别动 editor.selectionHighlightBackground——它只管你选中的那个词本身的背景色,和“其他匹配项”完全无关。真正起作用的是这两个:
-
editor.wordHighlightBackground:控制非聚焦状态下的匹配项背景(比如光标停在变量上但没选中) -
editor.wordHighlightStrongBackground:控制「你当前选中」时,其他同名位置的背景色——这才是你要调的
直接在 settings.json 里加这两行(带 alpha 透明度):
"editor.wordHighlightBackground": "#5a5a5a33", "editor.wordHighlightStrongBackground": "#5a5a5a55"
十六进制末两位(33/55)代表透明度,太实会盖住括号和引号,太虚又看不见。
为什么 const、if、字符串里的文本不被高亮
这不是 bug,是设计行为:editor.selectionHighlight 只对语言服务识别出的「语义标识符」生效。这意味着:
-
const、return这类关键字属于语法结构,不参与匹配 -
"count"字符串里的文本和变量count不被视为同一引用 - 以下划线开头的变量(如
_temp)默认被过滤,除非关掉editor.semanticHighlighting
想强制高亮任意文本?用 Ctrl+F 输入后按 Enter,这是查找态临时高亮,不是编辑态持续效果。
要不要装 highlight-words 插件
原生高亮满足不了才考虑它。比如你需要:
- 高亮关键字(
if、for)或字符串内文本 - 跨文件统一高亮同一个词
- 多色叠加、边框样式、正则匹配(如
console\.log)
安装后必须手动配 settings.json,只装插件不配置等于没装:
"highlightwords.colors": [{"dark": "cyan"}, {"dark": "pink"}],
"highlightwords.box": {"dark": true},
"highlightwords.defaultMode": {"default": 1}
defaultMode: 1 表示默认启用“全词匹配”,避免 a 高亮出 ab 里的 a。
真正容易被忽略的是:高亮是否生效,取决于你当前文件的语言模式是否激活、主题是否覆盖了颜色、以及你选中的到底是语义标识符还是纯文本——这三者缺一不可。


















