单产品网站模板,seo优化快排,如何精准引流呢,摄影设计网站VSCode插件开发 package.jsoncontributesconfigurationconfigurationDefaultscommandsmenuskeybindingsviewsviewsContainerscustomEditors 命令回调参数函数编辑器命令执行命令获取所有命令复杂命令 package.json
contributes
之前说到 package.json 是 vscode 扩展的清单文… VSCode插件开发 package.jsoncontributesconfigurationconfigurationDefaultscommandsmenuskeybindingsviewsviewsContainerscustomEditors 命令回调参数函数编辑器命令执行命令获取所有命令复杂命令 package.json
contributes
之前说到 package.json 是 vscode 扩展的清单文件里面有很多字段在这个文件中activationEvents、main 以及 contributes是文件中非常重要的部分。
contributes 是在 package.json 中的一组 JSON 声明是 package.json 中重要的内容有很多重要的配置项下面罗列一些比较常见的配置项。
configuration
插件配置项。
{contributes: {// 插件配置项configuration: {// 配置项标题会显示在vscode的设置页title: vscode-plugin-demo,properties: {// 举个例子配置昵称vscodePluginDemo.yourName: {type: string,default: guest,description: 你的名字},}}}
}其中详细的配置项有 title 标题插件的名称 properties 属性配置的 key 将用于命名空间和构造标题会根据 key 中层次结构进行分组。
// 例如
gitMagic.blame.dateFormat// 生成的标题是
Blame: Date Formatdescription 描述描述出现在标题之后和输入字段之前布尔值除外其中描述用作复选框的标签 type 类型number、string、boolean 可以直接在 settings UI 中编辑boolean 将会作为复选框的标签 default 定义属性的默认值 minimum / maximum 限制数值的最大值和最小值 maxLength / minLength 限制字符串长度 pattern 使用正则限制字符串 maxItems / minItems 限制数组长度 scope 范围 属性值 application适用于所有 VScode 实例的设置只能在用户设置中设置 machine在用户或远程设置中设置的机器特定设置 machine-overridable可以被工作区或者文件夹设置的机器特定设置 window可以在用户、工作区或远程设置中配置的 windows 特定设置 resource适用于文件和文件夹的资源设置可以在所有设置级别进行设置甚至文件夹设置 language-overridable可以在语言级别覆盖的资源设置 configurationDefaults
默认配置。
{contributes: {configurationDefaults: {[markdown]: {editor.wordWrap: on,editor.quickSuggestions: false}}}
}commands
由 title、icon可选、category、command 命令组成。默认情况下命令显示在命令面板中但它们也可以显示在其他菜单中。 当调用命令时VS Code 将发出 activationEvent onCommand:${command} {contributes: {commands: [{command: extension.sayHello,title: Hello World,category: Hello,icon: {light: path/to/light/icon.svg,dark: path/to/dark/icon.svg}}]}
}menus
菜单项。
{contributes: {menus: {editor/title: [{// 通过 when 来控制何时可见when: resourceLangId markdown,// 定义菜单被点击后要执行什么操作command: markdown.showPreview,// 定义备用命令按住alt键打开菜单时将执行对应命令alt: markdown.showPreviewToSide,// 定义菜单分组 通过 number 附加到组内来指定的group: navigation}]}}
}editor/title 是 key 值定义了这个菜单出现在哪里比较常见的是 explorer/context 和 editor/context
还可以选择的拓展项有
拓展项名称全局命令面板commandPalette资源管理器上下文菜单explorer/context编辑器上下文菜单editor/context编辑器标题菜单栏editor/title编辑器标题上下文菜单editor/title/context调试调用堆栈视图上下文菜单debug/callstack/context调试调用堆栈视图内联操作debug/callstack/context group inline调试变量视图上下文菜单debug/variables/context调试工具栏debug/toolbarSCM 标题菜单scm/titleSCM 资源组菜单scm/resourceGroup/contextSCM 资源文件夹菜单scm/resourceFolder/contextSCM 资源菜单scm/resourceState/contextSCM 更改标题菜单scm/change/titleSCM 源代码控制菜单scm/sourceControl视图标题菜单view/title查看项目菜单view/item/contextmacOS 触控栏touchBar注释线程标题菜单栏comments/commentThread/title注释线程上下文菜单comments/commentThread/context注释标题菜单栏comments/comment/title注释上下文菜单comments/comment/context时间线视图标题菜单栏timeline/title时间线视图项目上下文菜单timeline/item/context扩展视图上下文菜单extension/context
when 控制菜单什么时候出现when 语句也不仅仅适用于菜单项的控制
when 属性常用方式 when 不是字符串它是 true 或 false 的布尔值写成字符串形式 vscode 会去解析它when可以直接传 true 或 false例如 when: “true” 、when: “false”。
// 编辑器获得焦点时
when: editorFocus
// 编辑器文本获得焦点
when: editorTextFocus
// 编辑器获取焦点并且是js文件的时候
when: editorFocus resourceLangId javascript
// 后缀不为.js
when:resourceExtname ! .js
// 只在Linux,Windows环境下生效
when: isLinux || isWindowsalt定义备用命令按住 alt 键打开菜单时将执行对应命令 没有按下alt键时点击右键菜单执行的是 command 对应的命令按下了 alt 键后执行的是 alt 对应的命令。 group 定义了菜单的分组
组间分组控制菜单的分组和排序不同的菜单拥有不同的默认分组。
编辑器上下文菜单 editor/context 中的默认组有
navigation 放在这个组的最前面1_modification 更改组9_cutcopypaste 编辑组z_commands 最后一个默认组其中包含用于打开命令选项板的条目 navigation 是强制放在最前面的其它分组都是按照0-9、a-z的顺序来排列的 资源管理器上下文菜单 explorer/context 的默认组有
navigation 放在这个组的最前面2_workspace 与工作空间操作相关的命令3_compare 与差异编辑器中的文件比较相关的命令4_search 与在搜索视图中搜索相关的命令5_cutcopypaste 与剪切复制和粘贴文件相关的命令7_modification 与修改文件相关的命令
editor/title 的默认组有
1_diff 与使用差异编辑器相关的命令3_open 与打开编辑器相关的命令5_close 与关闭编辑器相关的命令
组内分组 默认同一个组的顺序取决于菜单名称自定义排序可以再组后面通过 数字 来自定义顺序。
editor/context: [{when: editorFocus,command: extension.sayHello,// 强制放在navigation组的第2个group: navigation2},{when: editorFocus,command: extension.demo.getCurrentFilePath,// 强制放在navigation组的第1个group: navigation1}
]keybindings
快捷键绑定当快捷键被触发时调用命令。
{contributes: {keybindings: [{command: extension.sayHello,key: ctrlf1,mac: cmdf1,when: editorTextFocus}]}
}views
视图必须为视图指定标识符和名称。 当用户打开视图时VScode 将会发出一个 activationEvent onView:${viewId} {contributes: {views: {explorer: [{id: nodeDependencies,name: Node Dependencies,when: workspaceHasPackageJSON,icon: media/dep.svg,contextualTitle: Package Explorer}]}}
}视图解释explorer活动栏中的资源管理器视图容器scm活动栏中的源代码管理 (SCM) 视图容器debug在活动栏中运行和调试视图容器test活动栏中的测试视图容器Custom view扩展提供的自定义视图容器
viewsContainers
视图容器必须为视图容器指定 identifier (标识符)、title (标题)、和 icon。
{contributes: {viewsContainers: {activitybar: [{id: package-explorer,title: Package Explorer,icon: resources/package-explorer.svg}]},views: {package-explorer: [{id: package-dependencies,name: Dependencies},{id: package-outline,name: Outline}]}}
}customEditors
告诉 VS Code 有关它提供的自定义编辑器的信息。customEditors 是一个数组扩展可以有多个自定义编辑器。
contributes: {customEditors: [{viewType: catEdit.catScratch,displayName: Cat Scratch,selector: [{filenamePattern: *.cscratch}],priority: default}]
}属性解释viewType自定义编辑器的唯一标识符displayName在 VS Code 的 UI 中标识自定义编辑器的名称selector指定自定义编辑器对哪些文件处于活动状态priority可选指定何时使用自定义编辑器default/option
命令
vscode.commands.registerCommand 是注册命令的API执行后会返回一个 Disposable 对象所有注册类的 API 执行后都需要将返回结果放到 context.subscriptions 中。
context.subscriptions.push(vscode.commands.registerCommand(extension.sayHello, () {vscode.window.showInformationMessage(Hello World)
}));回调参数函数
回调函数接收一个可选参数 uri
资源管理器右键执行命令时会把当前选中的资源路径 uri 作为参数传递编辑器右键菜单执行时会将当前打开文件路径 uri 作为参数传递CtrlShiftP 执行命令时参数为空
context.subscriptions.push(vscode.commands.registerCommand(extension.getCurrentFilePath, (uri) {vscode.window.showInformationMessage(当前文件(夹)路径是${uri ? uri.path : 空})
}));编辑器命令
vscode.commands.registerTextEditorCommand 命令是文本编辑器命令与普通命令不同它们仅在在编辑器被激活时调用才生效此外这个命令可以访问到当前活动编辑器 textEditor。
context.subscriptions.push(vscode.commands.registerTextEditorCommand(extension.testEditorCommand, (textEditor, edit) {console.log(textEditor, edit)
}));执行命令
vscode api 中很多命令都是返回一个类似于 Promise 的 Thenable 对象如果 api 里面返回的是这个对象说明这个方法不是直接返回结果的。
vscode.commands.executeCommand(extension.returnResult, params1, params2, ...).then(result {console.log(命令结果, result);
});获取所有命令
getCommands 可以用来获取所有命令它接收一个参数表示是否过滤内部命令默认为否。也可以直接打开快捷键设置就可以看到所有的命令列表。
vscode.commands.getCommands().then(allCommands {console.log(所有命令, allCommands);
});复杂命令
vscode 内部有一些复杂命令需要一些特殊参数并且通常有返回值、执行一些例如跳转到定义、执行代码高亮等操作、复杂命令列表可以参阅 vscode 插件开发官方文档。