配置
配置是用户在设置里改的值。扩展在 contributes.configuration 里声明形状,用 workspace.getConfiguration 读取,用 onDidChangeConfiguration 监听变化。
声明
{
"contributes": {
"configuration": {
"title": "Demo",
"properties": {
"demo.intervalMs": {
"type": "number",
"default": 1000,
"minimum": 200,
"description": "刷新间隔(毫秒)"
}
}
}
}
}
type 常用 string、number、boolean、array、object。可以用 enum、minimum、maximum、scope 限制取值和生效范围。scope 决定这项能写到用户设置、工作区,还是某个资源(语言或文件夹)。
configurationDefaults 用来给已有配置提供默认值,例如某种语言的编辑器选项,而不是发明一个新的配置键。
读取
const config = vscode.workspace.getConfiguration('demo');
const intervalMs = config.get<number>('intervalMs', 1000);
getConfiguration 的参数是节名,后面的 get 用节内的键。也可以 getConfiguration().get('demo.intervalMs')。
第二个参数可以传 Uri 或 { uri, languageId }。配置按语言或按文件夹有不同值时必须传资源,否则拿到的是不带资源范围的那一层。
写入与作用域
config.update(key, value, target) 把值写到某一层:
Global:用户设置Workspace:工作区WorkspaceFolder:多根工作区里的某一个文件夹
语言覆盖要配合 ConfigurationTarget 和语言范围参数,不能假设一次 update 会改掉所有语言。
监听
onDidChangeConfiguration 在任意配置变化时都会来。回调里用 event.affectsConfiguration('demo.intervalMs') 判断是不是自己的键,避免无关设置也触发刷新。