首先需在 package.json 中声明命令,然后在 extension.ts 中注册逻辑,通过 when 条件控制命令显示时机,结合内置或自定义上下文键实现精准触发,最后确保 setContext 权限正确配置。

VSCode 的命令面板(Command Palette)是开发者高效操作编辑器的核心工具之一。通过它,用户可以快速执行注册过的命令,而无需依赖鼠标菜单。要实现自定义命令的注册与执行上下文控制,需结合 package.json 中的声明、extension.ts 中的逻辑注册,以及上下文键(context key)进行条件控制。
在 VSCode 扩展中,所有可执行命令必须先在 package.json 的 contributes.commands 字段中声明:
"contributes": {
"commands": [
{
"command": "myExtension.sayHello",
"title": "Say Hello"
}
]
}
然后在 extension.ts 的 activate 函数中使用 vscode.commands.registerCommand 注册实际逻辑:
import * as vscode from 'vscode';
<p>export function activate(context: vscode.ExtensionContext) {
const disposable = vscode.commands.registerCommand('myExtension.sayHello', () => {
vscode.window.showInformationMessage('Hello from your extension!');
});</p><p>context.subscriptions.push(disposable);
}</p>完成上述步骤后,打开命令面板(Ctrl+Shift+P),输入“Say Hello”,即可执行该命令。
并非所有命令都应始终可见或可用。VSCode 支持通过 when 条件控制命令的显示时机。例如,仅在存在活动文本编辑器时启用命令:
"keybindings": [
{
"command": "myExtension.sayHello",
"key": "ctrl+h",
"when": "editorTextFocus"
}
]
更常见的是在 menus 中使用 when 控制命令在右键菜单或编辑器标题中的展示:
"menus": {
"editor/context": [
{
"command": "myExtension.sayHello",
"when": "resourceLangId == javascript"
}
]
}
这意味着该命令只在 JavaScript 文件的右键菜单中出现。
有时内置上下文键不够用,可通过 vscode.commands.executeCommand('setContext', key, value) 设置自定义上下文键:
vscode.commands.executeCommand('setContext', 'myExtension.inPreviewMode', true);
之后可在 when 表达式中使用这个键:
"when": "myExtension.inPreviewMode"
这在实现复杂状态控制时非常有用,比如仅当扩展进入某种模式时才显示特定命令。
基本上就这些。掌握命令注册与上下文控制,能让扩展更智能、更贴近用户操作场景。不复杂但容易忽略的是 setContext 的权限需在 package.json 中申请:
"activationEvents": [
"onStartupFinished"
],
"capabilities": {
"untrustedWorkspaces": {
"supported": true
}
}
以上就是VSCode命令面板_自定义命令注册与执行上下文的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号