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

VSCode扩展开发:如何获取当前编辑/查看的文件及工作区信息

VS Code 类 Discord Rich Presence 扩展状态信息获取实现

这类扩展获取当前编辑文件、工作区名称的逻辑完全基于VS Code官方暴露的扩展API,没有任何逆向或者hack操作,你觉得代码难读纯粹是因为混淆了外围无关逻辑,核心信息获取功能几十行代码就能写完。

当前编辑文件信息获取

你看到的Editing [file].js对应的文件名,直接通过VS Code的窗口对象就能拿到:

  • 扩展启动时先读取window.activeTextEditor属性,就能拿到当前激活的编辑器实例,从实例挂载的document对象的fileName字段里取到当前打开文件的完整本地路径,截掉路径前缀就是要展示的文件名。
  • 注册window.onDidChangeActiveTextEditor事件监听,只要用户切换标签、切换打开的编辑器,就会触发回调,拿到最新的编辑器实例更新文件名即可。

最小实现代码参考:

import { window } from 'vscode';

// 初始化时读取当前打开的文件
let activeFileName = window.activeTextEditor 
  ? window.activeTextEditor.document.fileName.split(/[\\/]/).pop()
  : null;

// 监听切换事件实时更新
window.onDidChangeActiveTextEditor(editor => {
  activeFileName = editor 
    ? editor.document.fileName.split(/[\\/]/).pop()
    : null;
  // 拿到最新文件名后推送给你的状态同步服务即可
  pushStatusToServer({ editingFile: activeFileName });
});

如果当前打开的是VS Code内置的设置页、扩展市场面板这类无本地文件的页面,document.fileName会返回特殊的内部标识,你可以自己加过滤规则,只展示真实的本地代码文件。

当前工作区名称获取

Workspace: [name]对应的工作区名称获取更简单,直接读workspace.name属性就能拿到当前打开的工作区名称。如果用户开了多根工作区模式,可以遍历workspace.workspaceFolders数组拿到所有工作区信息,一般这类扩展默认取第一个工作区名称展示即可。
如果要响应工作区切换的操作,注册workspace.onDidChangeWorkspaceFolders事件监听就行,触发时重新读取workspace.name更新状态。

参考代码:

import { workspace } from 'vscode';

// 初始化读取当前工作区
let activeWorkspaceName = workspace.name;

// 监听工作区变更
workspace.onDidChangeWorkspaceFolders(() => {
  activeWorkspaceName = workspace.name;
  pushStatusToServer({ workspace: activeWorkspaceName });
});

混淆代码对应的常见非核心逻辑

你之前看到的混淆内容,基本都是在处理这些和信息获取无关的逻辑:

  • 状态更新防抖:避免用户快速切换文件时短时间发送大量请求,一般会加2-3秒的防抖延迟
  • 文件类型图标匹配:根据文件后缀匹配对应展示的图标,比如.js文件展示JavaScript标识、.go文件展示Go标识
  • 通信逻辑:官方Discord扩展是和本地Discord客户端的本地RPC端口通信,你要同步到个人网站的话,把这部分逻辑改成给你自己的服务端发HTTP请求、或者走WebSocket长连接推状态即可
  • 闲置检测:监听用户的键盘、鼠标操作,判断用户多久没操作VS Code,自动切换到闲置状态

安全提示:VS Code扩展运行在本地环境,不要直接把扩展监听的端口暴露到公网,本地拿到状态后推送到你自己的中转服务,网站端从中转服务拉取状态即可,避免泄露本地文件路径等隐私信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:06:27