vscode 没有“仅对注释生效”的悬停开关,所谓只显示注释是通过关闭 html.suggest.html5、css.mdnsuggest 等干扰项,并配合规范注释格式与禁用 ai 插件实现的。

VSCode 没有“仅对注释生效”的悬停自定义开关,所谓“只显示注释内容”,本质是让语言服务器忽略默认签名、只渲染你写的 JSDoc 或 docstring——这靠的是关闭冗余信息源,而不是开启某个注释专属模式。
为什么悬停里总混着函数签名和 MDN 链接
默认情况下,VSCode 的 hover 是多层叠加的:LSP 提供类型签名 + 注释 + 外部文档(如 MDN)会一并塞进来。你看到的 function add(a: number, b: number): number 和下方的 JSDoc,其实是两个独立来源拼在一起的。
- JavaScript/TypeScript 中,
html.suggest.html5和css.mdnsuggest为document.getElementById这类 Web API 注入 MDN 链接,即使你写了@param也会被盖在下面 - Python 中,Pylance 默认同时返回 signature + docstring + type hints,无法单独屏蔽 signature 行
- 没有设置项叫 “show only comments”,只有组合压制手段
精准压制签名和外部文档的实操配置
目标不是“加功能”,而是“删干扰”。以下配置经实测可让 hover 只剩你写的注释(JSDoc/docstring),且不伤变量值预览、类型提示等核心能力:
- 打开设置(
Ctrl+,),搜索html.suggest.html5,设为false - 再搜索
css.mdnsuggest,同样设为false - 搜索
javascript.suggest.autoImports,暂时关掉(避免 import 补全干扰 hover 解析) - 执行
Developer: Reload Window(必须重载,不是重启)
改完后,在 document.querySelector 上悬停,不再出现 MDN 图标和跳转链接;在自定义函数上悬停,只显示你写的 @param 和 @returns,签名行消失。
注释写法必须严格匹配语言服务预期
压制了外部干扰后,如果 hover 仍为空白或只有函数名,问题一定出在注释本身没被 LSP 识别:
- JavaScript/TypeScript:必须用
/** */块注释,且紧贴函数声明上方,中间不能有空行;//或/* */单行注释无效 - Python:必须用 Google/NumPy 风格 docstring,含
Args:和Returns:字段;纯描述性三引号字符串(如"""Calculate sum.""")不会被 Pylance 解析为参数说明 - C/C++:需安装
ms-vscode.cpptools,注释格式同 JS,但只支持///前置单行注释(不是//),且必须在声明正上方
改完注释后务必保存文件——LSP 不监听未保存内容,状态栏右下角图标停止旋转才算加载完成。
AI 插件正在静默覆盖你的注释渲染
哪怕配置和注释都对,hover 仍显示 Copilot 生成的摘要或空白?大概率是 AI 扩展劫持了 vscode.languages.registerHoverProvider:
- 临时禁用
Github Copilot、Sesame AI、Tabnine等所有 AI 类扩展 - 按
Ctrl+Shift+P→ 输入Developer: Toggle Developer Tools→ Console 里执行:vscode.languages.getLanguages().then(console.log),确认当前语言 ID(如typescript)是否被正确注册 - 若禁用后 hover 恢复正常,说明插件冲突,而非代码问题
最易被忽略的一点:hover 内容不热更新。哪怕你秒速改完 JSDoc 并保存,只要 LSP 还在初始化(状态栏图标转圈),提示就卡在旧状态——别急着删配置,等 2–3 秒再试。











