悬停提示卡顿主因是插件劫持hover provider链路或同步执行重逻辑;需用Developer: Toggle Developer Tools→Console观察悬停时的报错(如“hover provider took longer than 500ms”),并配合Developer: Start Extension Bisect精准定位,禁用后须Restart Extension Host才能清除残留provider。

悬停提示卡顿是哪个插件在拖后腿
VS Code 悬停提示(hover)卡顿,90% 以上不是语言服务本身慢,而是某个插件劫持了 hover provider 链路,或在悬停触发时同步执行重逻辑。直接看 Developer: Show Running Extensions 里的 CPU 和 Activation Time 并不足够——因为 hover 是按需触发的,得结合实时行为观察。
关键动作:打开命令面板(Ctrl+Shift+P 或 Cmd+Shift+P),运行 Developer: Toggle Developer Tools,切到 Console 标签页,然后把鼠标移到一个变量上。如果看到类似 Extension host terminated unexpectedly、hover provider took longer than 500ms 或重复报 Cannot read property 'provideHover' of undefined,基本锁定问题插件。
- 常见“悬停刺客”:
esbenp.prettier-vscode(旧版会在 hover 时同步解析 AST)、bradlc.vscode-tailwindcss(对 class 名做实时匹配,大 HTML 文件下阻塞主线程)、GitHub.copilot(尤其在未登录或 token 过期时,hover 触发无限重试请求) - 状态正常但 hover 卡?检查
Developer: Show Running Extensions中该插件的Status列是否为Running且CPU列在你悬停瞬间明显跳动 - 禁用插件后仍卡?必须执行
Developer: Restart Extension Host,否则旧 hover provider 实例可能还在内存里挂着
为什么禁用插件后悬停还是慢
悬停响应链路长于表面想象:它要经过 VS Code 内置 hover service → 注册的 provider(多个插件可注册)→ 各自 resolve 逻辑 → 合并结果 → 渲染。只要其中任一环节没返回,整个 hover 就会卡住。所以即使你禁用了可疑插件,若 provider 没被真正卸载,或存在缓存残留,问题依旧。
-
Developer: Start Extension Bisect是唯一可靠手段:它强制清空所有 provider 注册表,再逐组启用,能避开“看似禁用实则残留”的陷阱 - 某些插件(如
ms-python.python旧版)会把 hover 逻辑绑定到全局python.defaultInterpreterPath变更事件,即使你没 hover Python 文件,它的 provider 也始终在监听——这类无法靠“只关当前文件类型插件”解决 - 确认是否真被禁用:打开
Extensions视图(Ctrl+Shift+X),搜索插件名,看右下角是否显示Disabled(不是灰色图标,而是明确文字);灰色图标可能只是被 workspace 级设置屏蔽,未生效
悬停卡顿和 files.watcherExclude 有什么关系
表面上无关,实际强耦合。VS Code 的 hover 提示依赖符号信息,而符号索引常由文件监视器(watcher)触发更新。如果你没配 files.watcherExclude,node_modules 或 .git 下的成千上万个文件变动会持续刷爆 watcher 队列,导致语言服务器(如 TypeScript Server)反复重建 AST,hover 查询就只能排队等索引就绪。
- 必配项(写入
settings.json):"files.watcherExclude": { "**/node_modules/**": true, "**/.git/**": true, "**/dist/**": true, "**/__pycache__/**": true } - 漏掉
**/前缀(比如写成"node_modules/**")会导致子目录照常扫描,完全无效 - 改完必须关闭并重新打开工作区,仅重启窗口或重载窗口(
Ctrl+R)不生效 - 前端项目加
"**/public/**": true,Python 项目加"**/venv/**": true,能进一步压降 watcher 压力
editor.hover.delay 调小真能缓解卡顿吗
不能。这个配置(默认 300ms)控制的是“鼠标停住多久才触发 hover”,不是 hover 响应速度。它只影响触发时机,不影响 provider 执行耗时。把 editor.hover.delay 设成 0,只会让 hover 更频繁地被调起,反而加重卡顿。
- 真正该调的是语言服务级配置:比如 TypeScript 项目中设
"typescript.preferences.includePackageJsonAutoImports": "auto",避免加载全量@types导致 hover 查询卡死 - ESLint 插件若开启
eslint.enable且eslint.run为onType,它会在 hover 时同步跑 lint,建议改为onSave - GitLens 的
gitlens.hovers.enabled默认为true,但它对每个 symbol 都查 Git 历史,大仓库下极易卡 hover,可直接设为false


















