首先在 package.json 的 contributes.commands 中声明命令,使其出现在命令面板;接着在 extension.js 中通过 vscode.commands.registerCommand 注册对应功能逻辑;然后通过 contributes.menus 配置上下文菜单,如 explorer/context 或 editor/context,并可使用 when 条件控制显示时机;最后合理利用 category、group 和 arguments 提升用户体验。整个过程以声明式配置为主,结合命令注册实现功能集成。
要在 VSCode 中为自己的扩展插件添加上下文菜单和命令面板入口,主要通过
package.json
的配置和使用
VSCode 扩展 API
来实现。整个过程不需要直接调用底层 API 注册菜单项,而是通过声明式配置结合注册命令完成。
1. 在 package.
json
中定义命令
所有命令必须先在
package.json
的
字段中声明,这是命令出现在命令面板(Command Palette)的前提。
{
"contributes": {
"commands": [
{
"command": "myExtension.sayHello",
"title": "Say Hello",
"category": "My Extension"
}
]
}
}
title
是显示名称,
category
会在命令面板中作为前缀(如 My Extension: Say Hello),帮助用户分类识别。
2. 注册命令并实现功能
在主文件
extension.js
(或 extension.ts)中使用
注册对应逻辑。
constvscode= require('vscode');
function activate(context) {
let disposable = vscode.commands.registerCommand('myExtension.sayHello', () => {
vscode.window.showInformationMessage('Hello from your extension!');
});
context.subscriptions.push(disposable);
}
module.exports = { activate };
这样,命令“myExtension.sayHello”就被激活,并可在命令面板中执行。
Trae win
Trae Windows 官方版本现已全面支持 Win10 和 Win11 系统(64位)。国内开发者可直接访问 Trae 中文官网(trae.cn 或 trae.com.cn),一键下载官方正版 .exe 安装包,享受国内直连的高速稳定体验。安装过程极其简便,双击即可运行,并支持一键无缝导入 VS Code 或 Cursor 的原有主题、快捷键及插件配置。登录支持手机号、微信或稀土掘金账号。内置免费的豆包与 DeepSeek 等顶级大模型,让你开箱即用,轻松开启高效的 AI 智能编程之旅。
下载
3. 添加上下文菜单入口
通过
配置,将命令添加到右键菜单。常用的位置包括
资源管理器
、编辑器、编辑器标签等。
"contributes": {
"menus": {
"explorer/context": [
{
"command": "myExtension.sayHello",
"when": "resourceFilename == *.js"
}
],
"editor/context": [
{
"command": "myExtension.sayHello",
"group": "navigation"
}
]
}
}
说明:
explorer/context
:在资源管理器中右键文件时显示。
editor/context
:在代码编辑器中右键时显示。
when
:控制菜单项何时可见,例如只对 JS 文件显示。
group
:控制菜单中的分组顺序,如 navigation、clipboard 等。
4. 常见场景与建议
为了让用户体验更自然,可以:
使用
向命令传递上下文数据,比如选中的文件路径。
结合
和
获取文件内容或路径。
在
条件中使用标准上下文变量,如
、
等。
避免在高频菜单(如 editor/context)中添加过多项,合理分组。
基本上就这些。只要在
package.json
正确声明命令和菜单位置,并在主模块注册
回调函数
,VSCode 就会自动处理界面集成。不复杂但容易忽略的是
条件和
的使用,合理设置能让插件更专业易用。
contributes.commandsvscode.commands.registerCommandcontributes.menusargumentsvscode.Urivscode.workspacewhenresourceScheme == fileeditorTextFocuswhencategory