我正在寻找一种在安装扩展时将初始设置写入 settings.json 的方法。
我找到了 WorkspaceConfiguration API,但这似乎是在运行时检索/更新值。
我希望将我的设置+注释放入默认设置文件中
我希望我正确地理解了你的问题:我假设你的意思是你可以通过“文件”>“首选项”>“用户设置”获取的“用户设置”settings.json。
如果您知道 TSLint 可以做到这一点,您可以转到扩展文件夹(Windows:$USERFOLDER/.vscode/extensions),选择扩展(在我的例子中是文件夹“eg2.tslint-0.6.7”)并查看文件。
...
"contributes": {
"configuration": {
"type": "object",
"title": "TSLint",
"properties": {
"tslint.enable": {
"type": "boolean",
"default": true,
"description": "Control whether tslint is enabled for TypeScript files or not."
},
"tslint.rulesDirectory": {
"type": [
"string",
"array"
],
"items": {
"type": "string"
},
"description": "An additional rules directory",
"default": ""
},
"tslint.validateWithDefaultConfig": {
"type": "boolean",
"description": "Validate a file when there is only a default tslint configuration is found",
"default": false
},
"tslint.configFile": {
"type": "string",
"description": "The path to the rules configuration file",
"default": ""
},
"tslint.ignoreDefinitionFiles": {
"type": "boolean",
"default": true,
"description": "Control if TypeScript definition files should be ignored"
},
"tslint.exclude": {
"type": [
"string",
"array"
],
"items": {
"type": "string"
},
"description": "Configure glob patterns of file paths to exclude from linting"
},
"tslint.run": {
"type": "string",
"enum": [
"onSave",
"onType"
],
"default": "onType",
"description": "Run the linter on save (onSave) or on type (onType)"
},
"tslint.nodePath": {
"type": "string",
"default": "",
"description": "A path added to NODE_PATH when resolving the tslint module."
},
"tslint.autoFixOnSave": {
"type": "boolean",
"default": false,
"description": "Turns auto fix on save on or off."
}
}
}
...
希望这有帮助
一种方法包括使用默认配置文件,这些文件将完全复制到 settings.json 文件中。 考虑在安装了 jq 和 node 的 Mac 上运行的以下现代 bash 函数。 它允许修改 settings.json 和 keybindings.json 以匹配尚未设置的默认值。 只需为默认设置和键绑定配置默认文件夹和文件名即可。
setup_vscode_defaults() {
#configure the below variables to the desired settings and keybindings
local settings_defaults="<default_folder/vs_code_settings.json>";
local keybindings_defaults="<default_folder/vs_code_keybindings.json>";
echo -e "\nSetting up default settings and keybindings for Visual Studio Code, without clobbering any preexisting settings.\n";
local vscode_user_folder=$HOME/Library/Application\ Support/Code/User; local backup_timestamp=$(date +%s);
local settings_file="${vscode_user_folder}/settings.json"; ln -s "${settings_file}" sf; local settings_backup="${vscode_user_folder}/settings_${backup_timestamp}.json";
local keybindings_file="${vscode_user_folder}/keybindings.json"; ln -s "${keybindings_file}" kf; local keybindings_backup="${vscode_user_folder}/keybindings_${backup_timestamp}.json";
local tmp_settings=/tmp/settings.json
local tmp_keybindings=/tmp/keybindings.json
#check if files exist or are empty and use complete default file in each case
if (! test -f sf ) || [[ $(cat "${settings_file}" | jq length) -eq 0 ]]; then cat "${settings_defaults}" > sf; fi
if (! test -f kf ) || [[ $(cat "${keybindings_file}" | jq length) -eq 0 ]]; then cat "${keybindings_deftauls}" > kf; fi
#checks to see if the exact default settings file is being used, and adds anything missing if not using the default
settings_adder() {
local set_file_type="${1}"; local set_file="${2}"; local set_file_backup="${3}"; local set_file_defaults="${4}"; local set_file_temp="${5}";
#backup settings file just in case
cp "${set_file}" "${set_file_backup}";
#install underscore node package for working with json if not already installed
if [ $(npm list -g | grep -c underscore-cli) -eq 0 ]; then npm install -g underscore-cli; fi
#creates arrays for settings vs. default settings, removing braces for settings and brackets for keybindings
unset arrSettings; local -a arrSettings=(); readarray -t arrSettings < <(cat "${set_file}" | jq -S | underscore --wrapwidth 500 print | perl -pe 's/^{\n$|^}\n$|^\[\n$|^\]\n$|,$//g' | sort);
unset arrDefSettings; local -a arrDefSettings=(); readarray -t arrDefSettings < <(cat "${set_file_defaults}" | jq -S | underscore --wrapwidth 500 print | perl -pe 's/^{\n$|^}\n$|^\[\n$|^\]\n$|,$//g' | sort);
for settingDef in "${arrDefSettings[@]}"; do
#add any settings from the default settings file that was not found in the user settings.json, by f-grepping the setting key (the first part, not the value, "key_s")-- fgrep does not interpret the string to grep, it is 'fixed'
if [[ "${set_file_type}" == "settings" ]] ; then key_s=$(echo "${settingDef}" | perl -pe 's/"([^:]+)":.+\n/\1/' ); fb="{"; lb="}";
elif [[ "${set_file_type}" == "keybindings" ]] ; then key_s=$(echo "${settingDef}" | perl -pe 's/^.+key": "([^"]+)".+\n/"\1"/g' ); fb="["; lb="]"; fi
#debug statement to show the setting, key for searching, and fgrep result: --> echo "${settingDef} - ${key_s}: $(fgrep -c ${key_s} ${set_file})"
if [[ $(fgrep -c ${key_s} ${set_file} ) -eq 0 ]]; then
arrSettings+=("${settingDef}")
fi
done
#now output the settings array into a file, starting with the first brace/bracket then the settings/bindings
for setting in "${arrSettings[@]}"; do
echo "${setting}," >> "${set_file_temp}_${backup_timestamp}"
done
echo "${fb}" > "${set_file_temp}"
# remove extra commas, last comma and add closing brace
cat "${set_file_temp}_${backup_timestamp}" | perl -pe 's/^,\n//g' | sort >> "${set_file_temp}"
sed -i '' '$ s/.$//' "${set_file_temp}"
echo "${lb}" >> "${set_file_temp}"
cat "${set_file_temp}" | jq -S | underscore --wrapwidth 500 print > "${set_file}";
}
if [[ $(md5sum ${settings_defaults} | perl -pe 's/ .+//') != $(md5sum sf | perl -pe 's/ .+//') ]]; then
settings_adder "settings" sf "${settings_backup}" "${settings_defaults}" "${tmp_settings}"
fi
if [[ $(md5sum ${keybindings_defaults} | perl -pe 's/ .+//') != $(md5sum kf | perl -pe 's/ .+//') ]]; then
settings_adder "keybindings" kf "${keybindings_backup}" "${keybindings_defaults}" "${tmp_keybindings}"
fi
unlink sf;
unlink kf;
}