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

VS Code API是否提供IDE关闭触发事件?用于扩展弹窗提示保存数据

在VS Code扩展中处理IDE关闭时的保存询问需求

VS Code 扩展 API 提供了window.onWillShutdown事件,完全适配你需要在IDE关闭前询问用户是否保存数据的场景。

核心用法说明

  • 该事件会在VS Code即将关闭时触发,你可以在回调中插入保存确认逻辑。
  • 回调函数支持返回boolean或Thenable<boolean>:返回false或Promise拒绝时,VS Code会终止关闭流程,等待用户处理完相关操作;返回true则允许IDE正常关闭。

代码示例

import * as vscode from 'vscode';

export function activate(context: vscode.ExtensionContext) {
    const shutdownListener = vscode.window.onWillShutdown(async () => {
        // 替换为你的实际未保存数据检查逻辑
        const hasUnsavedChanges = checkUnsavedData();

        if (hasUnsavedChanges) {
            const userChoice = await vscode.window.showInformationMessage(
                '检测到未保存的数据,是否保存?',
                { modal: true }, // 启用模态对话框,强制用户做出选择
                '保存',
                '不保存',
                '取消'
            );

            switch (userChoice) {
                case '保存':
                    await performSave(); // 替换为你的数据保存逻辑
                    return true;
                case '不保存':
                    return true;
                case '取消':
                default:
                    return false; // 取消IDE关闭
            }
        }
        return true;
    });

    context.subscriptions.push(shutdownListener);
}

// 示例:检查未保存数据的逻辑
function checkUnsavedData(): boolean {
    // 这里实现你的检查逻辑,比如判断缓存中是否有未持久化的数据
    return true;
}

// 示例:执行数据保存的逻辑
async function performSave(): Promise<void> {
    // 这里实现你的保存逻辑,比如写入文件或同步到远程
    console.log('正在保存数据...');
}

关键注意点

  • 必须给对话框设置modal: true,确保用户无法忽略对话框继续操作。
  • 回调中的异步操作需妥善处理,VS Code会等待Promise完成后再执行关闭流程。
  • 如果保存操作耗时较长,建议结合window.withProgress显示进度提示,提升用户体验。

内容的提问来源于stack exchange,提问作者SigmaTel71

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:48:17