首页 > 开发工具 > VSCode > 正文

VSCode上下文菜单定制开发

紅蓮之龍
发布: 2025-10-17 14:41:02
原创
874人浏览过
VSCode扩展可通过package.json的contributes.menus配置在资源管理器、编辑器等区域添加自定义右键菜单,结合extension.ts中registerCommand实现命令逻辑,并利用when条件控制显示时机,实现上下文菜单定制。

vscode上下文菜单定制开发

VSCode 的上下文菜单(即右键菜单)可以通过扩展开发进行定制,满足特定工作流的需求。你可以在资源管理器、编辑器、终端等多个区域添加自定义命令。实现方式主要依赖于 package.json 中的贡献点(contribution points)和激活事件,配合注册命令与菜单项。

1. 配置 package.json 菜单项

在你的 VSCode 扩展中,package.json 文件中的 contributes.menus 字段用于定义上下文菜单的显示位置和触发命令。

常见菜单位置包括:

  • explorer/context:文件资源管理器中的右键菜单
  • editor/context:代码编辑器内的右键菜单
  • editor/title/context:编辑器标签页上的右键菜单
  • scm/resourceGroup/context:源码管理面板中的菜单

示例配置:

"contributes": {
  "menus": {
    "explorer/context": [
      {
        "command": "myExtension.renameFile",
        "group": "modification"
      }
    ],
    "editor/context": [
      {
        "command": "myExtension.formatSelection",
        "when": "editorTextFocus && !editorReadonly"
      }
    ]
  },
  "commands": [
    {
      "command": "myExtension.renameFile",
      "title": "重命名文件(带确认)"
    },
    {
      "command": "myExtension.formatSelection",
      "title": "格式化选中内容"
    }
  ]
}
登录后复制

group 可控制菜单分组排序,如 navigation、clipboard、modification 等;when 表达式可控制菜单项的显示条件。

2. 在 extension.ts 中注册命令

菜单命令需要在主扩展文件(通常是 extension.ts)中通过 registerCommand 实际实现。

示例代码:

import * as vscode from 'vscode';
<p>export function activate(context: vscode.ExtensionContext) {
const renameFile = vscode.commands.registerCommand('myExtension.renameFile', async (resourceUri) => {
if (resourceUri instanceof vscode.Uri) {
const newPath = await vscode.window.showInputBox({ prompt: '输入新文件名' });
if (newPath) {
const newUri = vscode.Uri.joinPath(resourceUri.parent, newPath);
await vscode.workspace.fs.rename(resourceUri, newUri);
}
}
});</p><p>const formatSelection = vscode.commands.registerCommand('myExtension.formatSelection', async (e) => {
const editor = vscode.window.activeTextEditor;
if (editor && !editor.document.isReadOnly) {
const selection = editor.selection;
const text = editor.document.getText(selection);
// 简单处理:转为大写(实际可用 formatter)
await editor.edit(editBuilder => {
editBuilder.replace(selection, text.toUpperCase());
});
}
});</p><p>context.subscriptions.push(renameFile, formatSelection);
}</p>
登录后复制

注意:传递给命令的参数(如 resourceUri)由上下文自动注入,具体类型取决于菜单所在位置。

QCMS 轻量级企业建站系统6.0.5
QCMS 轻量级企业建站系统6.0.5

QCMS企业建站系统是通过MVC架构开发的一套PHP轻量级系统,开源,小巧,易用,功能强大、可以自定义模块,容易二次开发,可以称得上是万能CMS系统,可用于企业站,文章站,图片站,下载站,你只要能想得到,就能做的到。 QCMS V6.0.0 主要功能描述特色说明: 简单易用的模板标签,是我们系统的核心组成部分,系统对SEO更友好,源代码全部开放,毫无保留! 1 内容模块有 ,新

QCMS 轻量级企业建站系统6.0.5 0
查看详情 QCMS 轻量级企业建站系统6.0.5

3. 使用 when 条件精确控制显示

VSCode 支持丰富的上下文条件表达式,让菜单项只在合适场景出现。

常用条件包括:

  • resourceScheme == 'file':仅本地文件
  • resourceExtname == '.js':特定后缀文件
  • editorHasSelection:有文本选中时
  • config.editor.readOnly:编辑器是否只读

例如,只为 JavaScript 文件显示菜单:

"when": "resourceExtname == '.js'"

4. 图标与高级配置(可选)

你可以为命令添加图标,提升可视化体验。支持使用内置图标或自定义 SVG。

示例:

{ "command": "myExtension.backupFile", "title": "备份文件", "icon": "$(backup)" }

更多图标参考 官方图标列表

基本上就这些。通过合理配置菜单位置、命令逻辑和显示条件,你可以深度集成自定义功能到 VSCode 的右键菜单中,提升操作效率。不复杂但容易忽略的是上下文参数的获取和 when 表达式的准确编写。

以上就是VSCode上下文菜单定制开发的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号