VSCode命令面板_自定义命令注册与执行上下文

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

vscode命令面板_自定义命令注册与执行上下文

VSCode 的命令面板(Command Palette)是开发者高效操作编辑器的核心工具之一。通过它,用户可以快速执行注册过的命令,而无需依赖鼠标菜单。要实现自定义命令的注册与执行上下文控制,需结合 package.json 中的声明、extension.ts 中的逻辑注册,以及上下文键(context key)进行条件控制。

自定义命令注册(package.json + extension.ts)

在 VSCode 扩展中,所有可执行命令必须先在 package.jsoncontributes.commands 字段中声明:

"contributes": {
  "commands": [
    {
      "command": "myExtension.sayHello",
      "title": "Say Hello"
    }
  ]
}

然后在 extension.tsactivate 函数中使用 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”,即可执行该命令。

执行上下文控制(When 条件)

并非所有命令都应始终可见或可用。VSCode 支持通过 when 条件控制命令的显示时机。例如,仅在存在活动文本编辑器时启用命令:

"keybindings": [
  {
    "command": "myExtension.sayHello",
    "key": "ctrl+h",
    "when": "editorTextFocus"
  }
]

更常见的是在 menus 中使用 when 控制命令在右键菜单或编辑器标题中的展示:

论小文 论小文

可靠的论文写作助手,包含11种学术写作类型,万字论文一键生成,可降重降AIGC,参考文献真实可标注,图表代码均可自定义添加。

论小文 435 查看详情 论小文
"menus": {
  "editor/context": [
    {
      "command": "myExtension.sayHello",
      "when": "resourceLangId == j*ascript"
    }
  ]
}

这意味着该命令只在 J*aScript 文件的右键菜单中出现。

自定义上下文键(Custom Context Key)

有时内置上下文键不够用,可通过 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命令面板_自定义命令注册与执行上下文的详细内容,更多请关注其它相关文章!

本文转自网络,如有侵权请联系客服删除。