VSCode 的配置方法介绍

大部分关于VSCode的配置问题都可以在 VSCode中文文档 找到答案。

1、什么是 VSCode

VSCode是一款“轻量”的文本编辑器,通过安装各种扩展(Extention)可以轻松实现很多高级 IDE 软件的功能。VSCode的内核是开源的: Visual Studio Code - Open Source (“Code - OSS”) 。VSCode 的大部分的扩展也是开源的,可以直接在软件内安装使用,扩展下载商城: VSCode Extentions Marketplace

2、VSCode 的配置方式

2.1 VSCode 不同的配置文件

VSCode 的所有配置都可以通过编辑不同的配置文件完成

比如VSCode原生的配置文件:

  1. 全局 / 工作区配置settings.json(最核心,比如编辑器主题、快捷键、插件配置);
  2. 调试配置launch.json(调试代码的配置,如断点、环境变量);
  3. 任务配置tasks.json(自定义编译、运行任务的配置);
  4. 扩展相关extensions.json(推荐扩展、禁用扩展);
  5. 快捷键配置keybindings.json(配置所有VSCode的快捷键)

安装某些扩展后,可能会有单独配置文件用于配置该插件的各种功能,比如:

  1. C/C++c_cpp_properties.json(可配置引用目录、索引目录、编译器等多个选项);
  2. Prettier.prettierrc.json(代码格式化相关指令、模式等配置);
  3. DevContainerdevcontainer.json(独立docker开发环境配置信息);

一般只需要了解如何编辑settings.json,keybindings.json两个文件即可,所有配置文件的编辑思路和语法几乎都是一样的,一通则全通。

2.2 如何配置 ?

VSCode 也提供了可以直接在 UI 界面中进行操作的部分常用配置,点击软件左下角齿轮状图标可以找到设置界面的入口(或者是左上角的文件=> 首选项 =>设置)。也可以在命令面板 (Ctrl+Shift+P) 中选择首选项:打开设置命令。

F1命令打开设置界面

VSCode 支持直接在设置搜索栏搜索想要配置的选项,比如说直接搜索Editor: Mouse Wheel Zoom就能快速定位到该选项。如果该选项提供了可交互的操作组件,例如复选框,可输入的文本框、下拉菜单等,可直接在界面上完成勾选、输入、选择等操作。

搜索跳转至配置项

对于一些比较复杂的配置项,一般不能直接通过界面进行配置,而是在该选项下方给出一个可直接跳转到settings.json文件的超链接,需要用户手动在settings.json文件中进行编辑来配置该选项。

搜索跳转至配置项

注意:即便有些操作是在可视化界面完成的,只要用户修改了选项的默认值,VSCode 就会自动在settings.json文件中添加一条该配置项的自定义参数(等同于帮用户编写了一条配置)。在settings.json中编写配置项,本质上是覆盖该配置项的默认值。VSCode不推荐用户直接修改默认设置文件defaultSettings.json(默认为只读文件),如需修改某个选项,建议用户主动维护.vscode/settings.json来覆盖默认值。好处自不必多说,保障配置的可维护性、隔离性、可追溯性和跨环境兼容性blablabla~

3、配置项的优先级

3.1 主要作用范围:

VSCode 为配置项提供了不同的作用范围:

  • 用户设置 - 适用于打开的任何 VSCode 实例的全局设置。
  • 工作区设置 - 存储在工作区内,仅在打开工作区时适用。
  • 工作区文件夹设置 - 存储在工作区管理的文件夹内,仅针对于在该工作区内的该文件夹的设置。

3.2 作用域覆盖机制

配置可以通过不同的设置作用域在多个级别被覆盖。在以下列表中,后面的作用域覆盖前面的作用域。(截取之 VSCode 工作区设置)。

  • 默认设置 - 此作用域表示默认的未配置设置值。
  • 用户设置 - 全局应用于所有 VSCode 实例。
  • 远程设置 - 应用于用户打开的远程计算机。
  • 工作区设置 - 应用于打开的文件夹或工作区。
  • 工作区文件夹设置 - 应用于多根工作区的特定文件夹。

设置值可以是各种类型

  • 字符串 - "files.autoSave": "afterDelay"
  • 布尔值 - "editor.minimap.enabled": true
  • 数字 - "files.autoSaveDelay": 1000
  • 数组 - "editor.rulers": []
  • 对象 - "search.exclude": { "**/node_modules": true, "**/bower_components": true }

简单记忆为默认设置 < 用户设置 < 工作区设置 < 工作区文件夹设置核心逻辑是「更具体的配置覆盖更通用的配置」、「局部配置覆盖全局配置」,同时配置内的字段也遵循层级覆盖原则。

如图:用户 < 工作区 < [ ESP-IDF,TFT-LCD ],其中 ESP-IDF,TFT-LCD 同级

在这里插入图片描述

一个工作区内的每个文件夹下,都应该维护一个仅属于该文件夹的.vscode配置目录。VSCode 保证.vscode文件夹中的配置项仅作用于该文件夹内部,这个文件夹内的settings.json文件中的配置项应该是对通用配置的特化,作用域小的同时优先级更高

3.3 举例

开发C++项目,工作区内不同的文件夹实现不同的功能,每个文件夹依赖的头文件也是不尽相同的。此时如果可以给每个文件夹都差异化的配置includePath目录,可以有效的提升在编码过程中Code Intellisense的效率。

app_project/
├── .vscode/
│   └── c_cpp_properties.json  # includePath: [UNDERLYING_SOFTWARE_LIB, MIDDLEWARE_LIB]
├── data_collection/
│   ├── .vscode/
│   │   └── c_cpp_properties.json  # includePath:[SPI_EQUIP_INC_PATH]
│   └── xxx.cpp
└── communication_module/
    ├── .vscode/
    │   └── c_cpp_properties.json  # includePath:[COMMON_COMM_INC_PATH]
    └── xxx.cpp
// Note that the VSCode configuration file is in JSONC format,
// which supports double-slash (//) comments.

// Global Properties`s c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Global Properties",
            "includePath": [
                // Include underlying sorftware lib for all submodules
                "${config:MyEnvVariables.UNDERLYING_SOFTWARE_LIB}/**",
                // Include middleware lib for all submodules
                "${config:MyEnvVariables.MIDDLEWARE_LIB}/**",
                "${workspaceFolder}/**"
            ],
        }
    ],
    "version": 4
}

// Data Collection Module`s c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Data Collection Module",
            "includePath": [
                // Only include the necessary lib
                "${config:MyEnvVariables.SPI_EQUIP_INC_PATH}/**",
                "${workspaceFolder}/**"
            ],
        }
    ],
    "version": 4
}

// Communication Module`s c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Communication Module",
            "includePath": [
                // Only include the necessary lib
                "${config:MyEnvVariables.COMMON_COMM_INC_PATH}/**",
                "${workspaceFolder}/**"
            ],
        }
    ],
    "version": 4
}

4、开发环境的简单隔离

结合不同的配置文件,以及工作区=>工作区文件夹的多级settings.json配置,可以做到开发环境的简单隔离。

配置文件管理界面

主要流程可以是:

  1. 创建专用于一个项目的用户配置文件:
    • 软件左下角齿轮图标 => 选择配置文件选项 => 打开配置文件管理界面 => 新建配置文件
    • 可以从现有的配置文件中继承,建议先创建一份比较"通用"的配置文件,比方说配置好字体、主题等通用设置,安装好通用扩展。之后创建新的配置文件可以直接以这个配置为基础进行特化。
  2. 之后在新配置文件下进行的动作:安装新的扩展、全局settings.json配置等,都不会影响到其他配置。
  3. 可以手动在”文件夹和工作区“的配置项中直接添加要使用该配置的文件夹,后续打开这个文件会自动选用该配置文件
  4. 可以创建多种配置以应对不同的项目。比如说只进行嵌入式开发的项目就不需要安装Java的扩展了;只进行深度学习模型训练的话,也不需要安装PlatformIO等嵌入式相关扩展了。这样可以有效的提升VSCode的性能,至少能使加载速度快很多。

PS1: 个人能力有限,文档内容或有疏漏,恳请各位谅解。若文中存在不当之处,欢迎大家不吝指正,共同交流探讨。
PS2: ❤️❤️❤️天依宝宝真可爱❤️❤️❤️

在这里插入图片描述
歌曲分享:淋完这场雨就忘记你吧
Pixiv 原图地址

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐