将初始设置写入settings.json

问题描述 投票:0回答:2

我正在寻找一种在安装扩展时将初始设置写入 settings.json 的方法。

我找到了 WorkspaceConfiguration API,但这似乎是在运行时检索/更新值。

我希望将我的设置+注释放入默认设置文件中

例如TSLint 是如何做到的: enter image description here

visual-studio-code vscode-extensions
2个回答
1
投票

我希望我正确地理解了你的问题:我假设你的意思是你可以通过“文件”>“首选项”>“用户设置”获取的“用户设置”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."
            }
        }
    }
...

希望这有帮助


0
投票

一种方法包括使用默认配置文件,这些文件将完全复制到 settings.json 文件中。 考虑在安装了 jqnode 的 Mac 上运行的以下现代 bash 函数。 它允许修改 settings.jsonkeybindings.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;
}
© www.soinside.com 2019 - 2024. All rights reserved.