需禁用调试器的 hoverevaluate 功能:node.js 项目在 launch.json 或 settings.json 中设 "debug.javascript.hoverevaluate": false;python 项目暂无独立开关,可运行命令 debug: toggle hover evaluation 临时关闭;该功能与 editor.hover.enabled 无关,属调试协议(dap)行为。

VSCode怎么关掉悬停时自动求值表达式(比如 hoverEvaluate)
VSCode 默认不会在悬停时执行代码,但当你启用调试器(尤其是 Chrome、Node.js 或 Python 调试扩展)并处于调试会话中时,hoverEvaluate 功能会被激活——鼠标悬停在变量或表达式上,它会实时调用调试器执行求值,返回结果(甚至可能触发副作用)。这不是普通 hover,而是调试协议(DAP)行为,editor.hover.enabled 完全无效。
- 该功能只在「调试模式下」生效:未启动调试时,悬停不会求值;一旦按 F5 启动,且调试器支持 DAP 的
evaluate请求,就会默认开启 - 控制开关不在编辑器设置里,而在调试配置中:
debug.inlineValues影响内联值显示,但悬停求值由debug.toolBarLocation等无关项不控制,真正起作用的是调试器自身的hoverEvaluate开关 - 不同调试器实现不同:Node.js 调试器(@vscode/js-debug)默认启用;Python 调试器(ptvsd 已弃用,现用 debugpy)也默认启用;而某些轻量调试器(如 C/C++ 的 cppvsdbg)可能不支持或默认关闭
debug.javascript.autoAttachFilter 不相关,别被名字误导
这个名字容易让人以为和悬停求值有关,但它实际控制的是「是否自动附加到子进程」,和 hover 无任何关系。误关它可能导致调试中断,但不会影响悬停行为。
真正有效的关闭方式:改调试器 launch.json 或设置
最稳妥的关法是针对当前调试器显式禁用。例如:
- 对 Node.js/JS/TS 项目(使用
js-debug):在launch.json的配置中加"hoverEvaluate": false - 全局禁用(所有 JS 调试会话):在
settings.json中加"debug.javascript.hoverEvaluate": false - 对 Python(debugpy):需在
launch.json中添加"justMyCode": true并配合"console": "integratedTerminal",但更直接的是设"showGlobalVariables": false(仅影响变量视图),悬停求值本身目前无独立开关,只能通过禁用整个调试器 hover(见下条) - 终极静音法:在调试状态下,按
Ctrl+Shift+P(Cmd+Shift+P)运行命令Debug: Toggle Hover Evaluation—— 这是运行时开关,无需重启调试会话
为什么关了 editor.hover.enabled 还在求值?
因为这是两个完全独立的通道:编辑器层的 hover 显示文档/类型,走 LSP;而悬停求值走的是调试器的 DAP 协议,底层调用的是正在运行的进程。哪怕你把 editor.hover.enabled、vue.editor.hover.enabled、colorDecorators.enabled 全关了,只要调试器开着且支持,hoverEvaluate 就照常工作。它甚至能求值 process.env.NODE_ENV 或 document.cookie——这点必须警惕。











