VSCode悬停提示仅支持https://绝对URL和command:协议链接;相对路径、file://、vscode-resource:均无效。command:链接需满足三条件:命令ID已在package.json声明、与registerCommand注册一致、用vscode.MarkdownString(true)包裹Markdown格式文本。

悬停提示里能放哪些链接?
VSCode 的 vscode.Hover 只支持两类可点击链接:https:// 绝对 URL 和 command: 协议链接。相对路径(如 ./readme.md)、file:// 本地路径、vscode-resource:(已弃用)全部无效。点一下就毫无反应,控制台也不会报错——这是最常被忽略的“静默失败”。
怎么写一个能点击的 command: 链接?
必须满足三个条件才真正可点击:
-
command:后面跟的是已在package.json的contributes.commands中声明过的命令 ID - 命令 ID 必须和
vscode.commands.registerCommand()注册时用的一致(大小写、拼写、命名空间全对) - 链接文本需包裹在 Markdown 格式中,且用
vscode.MarkdownString构造,并传true启用解析:new vscode.MarkdownString('[打开日志](command:myExtension.openLog)', true)
漏掉任意一条,链接都会变成纯文本——看着像超链接,点不动。
为什么点击 command: 链接后没反应?
常见卡点不是代码写错,而是上下文缺失:
- 命令注册时机太晚:确保
registerCommand在activate()开头就执行,别包在异步回调或条件分支里 - Hover 内容没保存到返回值:
provideHover必须 返回new vscode.Hover(...),不能只console.log或赋值给变量就完事 - 语言模式不匹配:注册
registerHoverProvider('typescript'),但当前文件是.js且没配jsconfig.json,LSP 不激活,provider 根本不触发
检查方法:打开开发者工具(Ctrl+Shift+P → Developer: Toggle Developer Tools),悬停时看 Console 是否有 command not found 报错。
图片链接能点开吗?
不能直接点开本地图片。如果想实现“悬停显示图片 + 点击在新标签页打开”,得拆成两步:
- 用
vscode.MarkdownString渲染 base64 或网络图片(仅用于预览) - 再加一个
command:链接,指向自定义命令,在命令里调用vscode.env.openExternal(vscode.Uri.parse('https://...'))或vscode.workspace.openTextDocument()
注意:openExternal 对 file:// 仍受限(尤其 macOS),优先走 HTTP(S) 服务托管图片。











