VS Code 插件Setting开发
优先级
在进行设置项开发时认真阅读设置优先级相关的内容 (Visual Studio Code User and Workspace Settings)。
什么是 “workspace”
官方解释链接 What is a VS Code “workspace”,相关API的使用会用到工作区的概念,建议看文档,官方对于工作区的定义。
一般情况下一个VS Code 实例(窗口)打开一个文件夹,根据需求一个VS Code实例(窗口),可使用高级配置 Multi-root workspaces 多根工作区来包含多个文件夹。
打开多个工作区文件夹方式:File -> Add Folder to Workspace
设置值的存储
全局设置项的值存储位置
Windows: %APPDATA%\Code\User\settings.json
工作区空间设置项的存储
- 只有一个工作区空间文件夹时,设置项保存在 .vscode/settings.json
- 存在多个工作区空间文件夹时,设置项保存在 <***>.code-workspace 中
在设置页面对设置项重置时,其值会从对应的的 .json 文件中进行移除
在package.json配置设置项
"configuration": {
"title": "PyReloader",
"properties": {
"aa.bb.cc.dd": {
"type": "string",
"default": null,
"scope": "window",
"markdownDescription": "示例"
},
}
}
所示 aa.bb.cc.dd 就是一个设置项,设置项由字符串组成,用.分割,分割成若干部分。
设置的适用范围
在package.json中通过scope字段控制设置项的适用范围
- machine: 只能在用户设置或远程设置中配置的配置。
- application: 只能在用户设置中配置的配置
- language-overridable: 可以在特定于语言的设置中配置的资源配置
- machine-overridable: 可在工作区或文件夹设置中配置的机器配置。
- resource: 可以在用户、远程、工作空间或文件夹设置中配置的配置。
- window: 可以在用户、远程或工作区设置中配置的配置。
读取设置项,get、inspect方法
配置示例
"properties": {
"aa.bb.cc.dd": {
"type": "string",
"default": null,
"markdownDescription": "示例"
},
}
get方法
通过官方API
export function getConfiguration(section?: string, scope?: ConfigurationScope | null): WorkspaceConfiguration;
参数
section: 设置项,以.分隔的标识字符串,可以是设置项分隔后的一部分
scope: 设置项的适用范围
返回值: WorkspaceConfiguration 对象
const setting = vscode.workspace.getConfiguration(“aa.bb”, undefine);
setting包含一个只读的对象 {cc: {dd: 100}}
通过setting可获取值 setting.get(“cc.dd”);
const setting = vscode.workspace.getConfiguration(“aa”, undefine);
setting包含一个只读的对象 {bb: {cc: {dd: 100}}}
通过setting可获取值 setting.get(“bb.cc.dd”);
get 方法使用注意
- 调用 getConfiguration 未指定配置适应范围时,get 方法将会按照从小范围到大范围依次获取值
- 在使用 getConfiguration、get时,指定适用范围没有生效(暂时没查到原因),依旧按照未指定适应范围的规则获取
- 注意:在设置页面对设置项编辑器之后,如果没有重置其值,就算设置项的值与默认值相同也不是默认值
inspect方法
const configuration= vscode.workspace.getConfiguration(“aa.bb”, undefine);
configuration.inspect(“cc.dd”);
检查一个配置项的所有相关信息,包括默认值、全局值、工作区值、文件夹值和语言特定值。有一定限制,获取信息里面只能获取默认值,全局值、工作区值
对设置的修改
update(section: string, value: any, configurationTarget?: ConfigurationTarget | boolean | null, overrideInLanguage?: boolean): Thenable<void>;
修改工作区的设置项
const configuration= vscode.workspace.getConfiguration(“aa.bb”, undefine);
configuration.update(“cc.dd”, vscode.ConfigurationTarget.Workspace);
使用注意事项:
- 对于设置项的修改,指定适应范围有全局、工作空间、工作空间文件夹,对于工作空间有多个文件夹,无法指定对哪个工作区文件夹进行修改,修改的就是第一个工作区文件夹的值。
- 当使用设置类型为字符串时,且设置默认值为 null 之后,编辑过后内容然后输出内容,此时不是默认值,是一个空字符串
4万+

被折叠的 条评论
为什么被折叠?



