You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在monaco-editor中以编程方式单独唤起带自定义内容的文档弹窗

documentation box

实现方案

可以通过VS Code扩展API直接唤起指定内容的原生文档弹窗,无需依赖补全项触发,以下是具体实现代码:

方案1:原生样式文档弹窗(与补全唤起的文档弹窗完全一致)

通过临时注册悬浮提供器,主动触发系统悬浮命令实现,体验和原生弹窗完全统一:

扩展逻辑代码

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
    // 注册自定义命令,后续绑定快捷键
    const showCustomDocCommand = vscode.commands.registerCommand('custom-doc.show', async () => {
        const activeEditor = vscode.window.activeTextEditor;
        if (!activeEditor) return;

        // 临时注册悬浮提供器,返回你要展示的自定义内容
        const tempHoverProvider = vscode.languages.registerHoverProvider(
            { scheme: 'file' }, // 可按需调整为指定语言,比如{ language: 'javascript' }
            {
                provideHover() {
                    const docContent = new vscode.MarkdownString();
                    // 支持完整Markdown语法
                    docContent.appendMarkdown('# 自定义文档\n');
                    docContent.appendMarkdown('* 支持斜体、**加粗**、代码块等格式\n');
                    docContent.appendCodeblock('const test = "代码示例";', 'typescript');
                    return new vscode.Hover(docContent);
                }
            }
        );

        // 主动唤起原生悬浮弹窗
        await vscode.commands.executeCommand('editor.action.showHover');
        // 弹窗唤起后注销临时提供器,不影响原有悬浮功能
        tempHoverProvider.dispose();
    });

    context.subscriptions.push(showCustomDocCommand);
}

快捷键绑定配置

在扩展的package.json中添加对应配置,即可通过快捷键触发:

{
    "contributes": {
        "keybindings": [
            {
                "command": "custom-doc.show",
                "key": "ctrl+shift+h", // 可替换为你需要的快捷键组合
                "when": "editorTextFocus"
            }
        ]
    }
}

方案2:完全自定义样式弹窗

如果需要更灵活的内容布局,可以使用Webview实现完全自定义的文档弹窗:

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
    const showCustomWebviewDoc = vscode.commands.registerCommand('custom-doc.webview-show', () => {
        const docPanel = vscode.window.createWebviewPanel(
            'customDocPanel',
            '自定义文档',
            vscode.ViewColumn.Beside, // 弹窗显示位置
            { enableScripts: true } // 如需使用JS可开启
        );

        // 填充自定义HTML内容
        docPanel.webview.html = `
        <!DOCTYPE html>
        <html lang="zh-CN">
        <head>
            <style>
                body { padding: 20px; color: var(--vscode-foreground); }
                code { background: var(--vscode-textCodeBlock-background); padding: 2px 6px; border-radius: 3px; }
            </style>
        </head>
        <body>
            <h1>自定义文档标题</h1>
            <p>这里可以放任意自定义内容,支持HTML、CSS、JS</p>
            <pre><code>console.log("自定义代码示例");</code></pre>
        </body>
        </html>
        `;
    });

    context.subscriptions.push(showCustomWebviewDoc);
}

内容的提问来源于stack exchange,提问作者Chirag Sourabh S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 21:36:01