手把手带你开发一个简单的 VS Code 插件!
以下是详细的步骤指南,以一个简单的状态栏轮播功能来开始VS Code 插件的学习吧~
功能概述:
- 在状态栏显示文案库中文案和emoji装饰
- 支持定时更新显示内容
- 提供配置选项控制更新频率

一、环境准备
-
安装 Node.js
- 这就不啰嗦了
-
安装 Yeoman 和 VS Code 生成器
cssnpm install -g yo generator-code
二、创建项目
-
生成项目骨架
cssyo code
- 选择插件类型(通常选
New Extension
) - 填写名称、描述等元信息(后续可修改)
- 选择 TypeScript 或 JavaScript
- 选择插件类型(通常选
-
项目结构说明
bash├── .vscode/ # VS Code 调试配置 ├── src/ │ └── extension.ts # 插件入口文件 ├── package.json # 插件清单 ├── tsconfig.json # TypeScript 配置 └── CHANGELOG.md # 更新日志
三、具体功能实现
-
修改 package.json
activationEvents
: 定义插件何时被激活(如onCommand
)contributes
: 注册命令/菜单项/配置等
-
实现功能(JavaScript 示例)
数据存储:
-
使用cuteEmojis数组存储装饰性emoji
-
poemList数组存储大量精选语录文本
-
colors数组定义状态栏文本颜色选项
jsconst vscode = require('vscode'); const cuteEmojis = ["🌸", "🐈", "🍬", "🌈", "🍭", "✨", "🎀", "⭐", "💫"]; const poemList = [ "如此年轻的我,很想要改变这个世界。", "我将继续寻找,就算这无尽的星辰,令我的寻找希望渺茫,就算我将单枪匹马。", "如果很容易实现的话,初心就不会这么珍贵。", "总有一天,你蜡烛的光会照耀到另外的人。", "人是有资格,陷在困局里的。", "我被森林包裹,我自林中坠落。", "于无声处听惊雷。", "实现梦想还要很久,巧了,我还有一生的时间。" ] const colors = ["#FF578C", "#D12020", "#589604", "#099687", "#3357FF", "#4E05A6", "#9C046F", "#06306F"];
核心功能实现:
- getRandomPoem()函数随机组合emoji和语录
- 通过vscode.window.createStatusBarItem创建状态栏项
- 使用setInterval实现定时更新功能
js/** * 随机获取一条带emoji装饰的语录 * @returns {string} 返回格式为"emoji 语录"的字符串 */ function getRandomPoem() { const poemIndex = Math.floor(Math.random() * poemList.length); const emojiIndex = Math.floor(Math.random() * cuteEmojis.length); return `${cuteEmojis[emojiIndex]} ${poemList[poemIndex]}`; } /** * 插件激活函数 * @param {vscode.ExtensionContext} context 扩展上下文 */ function activate(context) { console.log('Congratulations, your extension "he-said" is now active!'); const statusBarItem = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, 100); statusBarItem.text = getRandomPoem(); statusBarItem.color = colors[Math.floor(Math.random() * colors.length)]; statusBarItem.show(); // 获取配置并设置初始定时器 let updateInterval = vscode.workspace.getConfiguration('he-said').get('updateInterval') || 60; let interval = setInterval(updateStatusBar, updateInterval * 1000); // 配置变更监听器 context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(e => { if (e.affectsConfiguration('he-said.updateInterval')) { clearInterval(interval); updateInterval = vscode.workspace.getConfiguration('he-said').get('updateInterval') || 60; interval = setInterval(updateStatusBar, updateInterval * 1000); } })); function updateStatusBar() { statusBarItem.text = getRandomPoem(); statusBarItem.color = colors[Math.floor(Math.random() * colors.length)]; } // 注册示例命令 let disposable = vscode.commands.registerCommand('he-said.helloWorld', function () { // 显示信息提示框 vscode.window.showInformationMessage('Hello World from he-said!'); }); // 在插件停用时清理资源 context.subscriptions.push(disposable); context.subscriptions.push({ dispose: () => { // 清除定时器 clearInterval(interval); // 销毁状态栏项 statusBarItem.dispose(); } }); } /** * 插件停用函数(当前无具体实现) */ function deactivate() { } // 导出模块接口 module.exports = { activate, // 插件激活函数 deactivate // 插件停用函数 }
配置管理:
- 通过vscode.workspace.getConfiguration获取用户配置
- 监听配置变更事件实现动态调整更新频率
jsupdateInterval = vscode.workspace.getConfiguration('he-said').get('updateInterval') || 60;
-
四、调试运行
-
按 F5 启动调试
- 会自动打开一个新的 VS Code 窗口(扩展开发主机)
-
测试功能
- 按
Ctrl+Shift+P
执行你的命令(如 "Say Hello") - 使用调试控制台查看日志输出
- 按
五、发布准备
-
打包插件
gonpm install -g vsce vsce package
生成
.vsix
文件 -
发布选项
- 发布到 Marketplace
- 或手动安装:
Extensions > ... > Install from VSIX
六、示例源码和学习资源
- 示例源码
- 官方文档 - 必读
- 扩展示例库
- Extension API 参考
建议从简单功能开始,逐步扩展。做一些自己喜欢的功能,会增强兴趣 😜