VSCODE 配置文件书写详解

一.task.json

决定文件怎么编译,本质就是在指定的type下不断重复执行command和args构成的命令

1.基本框架

{
	"version":"2.0.0",//固定版本号
	"tasks":[   //任务数组,可以定义多个任务   
	{//任务一},
	{//任务二}
	],
	"inputs":[  //可选,也就是可以不写这个,本文档暂时不涉及,这用于定义在任务中使用的输入变量
	{/*输入定义*/}
	]
}

"task"参数详解
  • 重要字段

  • 标黄的字段为必填选项

  • ==label:==任务的显示名称

  • ==type:==有两种类型,一种是"shell",一种是"nmp",(执行的任务类型,一般写shell,就是任务在shell中执行)

    ​ “shell”:通过系统的shell 执行命令,cmd/powershell/bash/zsh

    ​ “nmp”:专用于nmp脚本,此时command也不需要了,只需要script

  • ==command:==要执行的程序的名字(或路径),一般来说就是python,gcc,nmp,echo啥的

  • args:传递给command的参数,注意输入时必须使用数组输入,而不要输入字符串

eg. “args”:[…]

​ 记得 command和args 是不可分离的,一个是可执行文件,另一个是传递参数

常见命令

command args
1.系统本身命令 eg.
输出文本 echo [“hello”]
创建目录 mkdir [“dist”]
删除文件 del [“-rf”,“dist”]
复制文件 cp [“src/main.js”,“dist/”]
改变目录,定位文件 cd 一般不单独在这里使用这个命令
移动文件 mv [“old.txt”, “new.txt”]
列出目录 ls/dir [“-l”]
command args
2.编译命令
python python/python3 [“scripts.py”,“–vervbose”]
C gcc/g++ [“main.c”,“-o”,“main”]
clang Clang 编译器 ["test.c", "-o", "test"]
go Go 语言 ["run", "main.go"]["build", "-o", "myapp"]
java Java 运行 ["-cp", ".", "Main"]
dotnet .NET CLI ["build", "MyProject.csproj"]

常见补充命令:

GCC: 编译格式

gcc [参数] 源文件 ... [-o 输出文件] 

-o <文件> 指定输出可执行文件名

-g 生成调试信息

-c 只编译不连接,生成.o文件

准确说,command就是要执行的命令,args就是要传递给command命令的参数

args中间用逗号隔开参数的就是在终端中用空格隔开的参数

eg.

pip install numpy

“command”:“pip”,

“args”:[“install”,“numpy”]


  • options:指定环境配置,比如工作目录,环境变量,shell等
"options":{
"cwd":""//当前工作目录,不指定的话默认项目根目录

"env":{    //用于修改环境变量,会覆盖系统本身的同名变量
"PATH":"",  //添加PATH
"API_KEY":""
}
"shell":{//用于修改shell,仅在type选了shell时可用,例如想把Windows自带的改为bash
"executable":""//shell的路径
"args":[]
}
	  
}

  • group:任务分组, 会把任务分为"“构建”“或者"测试”,可以设置默认任务来利用快捷键运行

通常可以忽略,因为group唯一的作用就是绑定快捷键,不使用快捷键完全没有用

"group": {
    "kind": "build",   // 或 "test"、"none"
    "isDefault": true  // 可选,设为 true 表示该任务是默认构建/测试任务
}

说明:

build任务和 Ctrl+Shift+B 绑定,按下快捷键会运行类似gcc main.c -o app的指令

test和 Ctrl+Shift+T 绑定


  • presentation:输出面板控制行为,可以定制个性化的东西,但有些选项十分必要

一下是一个简要实例,包括了presentation的几个参数

"presentation": {
    "reveal": "always",      // always(自动打开输出面板,默认) / silent (不打开但后台运行,比如一些不关心输出的任务可以用)/ never(不显示)
    
    "panel": "shared",       // shared(所有任务公用一个终端,默认) / dedicated (每个人物单独分配)/ new(每次运行都建立一个新终端)
    
    "clear": false,          // 是否每次运行前清空输出
    "showReuseMessage": true,
    "focus": false           // 运行后是否聚焦到输出面板(就是说运行程序之后光标自动放到输出面板上,适合要输入的任务)
}
  • problemMatcher:解析错误输出,作用是分析输出面板的错误信息,并帮助我们定位到具体错误位置
"problemMatcher": "$gcc"

以上就是这个命令的常见格式

常见参数:也就是识别的是什么工具的错误信息

GCC/G++ $gcc
MSVC(cl.exe) $msCompile
TypeScript 编译器 $tsc

  • runOptions:控制任务运行时的高级行为,比如是否在重新运行任务时重新评估变量、是否在文件夹打开时自动运行等。(一般没用)

  • detail:在“运行任务”的命令面板中,为任务显示一行额外说明文字,帮助你区分多个相似任务。(不会影响任务的执行)

  • isBackground:作用是告诉vscode这个任务会一直运行不会自动结束

默认情况下,VS Code 认为任务执行完命令就会退出。如果你运行一个服务器,它会一直挂在那里不退出,VS Code 会误以为任务卡住了,无法正常运行依赖它的其他任务(比如调试)


可变参数
变量 含义 示例值
${workspaceFolder} 当前打开的工作区根目录的路径 /home/user/myproject
${workspaceFolderBasename} 工作区根目录的文件夹名(不含路径) myproject
${file} 当前在编辑器中打开的文件完整路径 /home/user/myproject/src/main.py
${fileWorkspaceFolder} 当前文件所在的工作区根目录 /home/user/myproject
${relativeFile} 当前文件相对于工作区根目录的路径 src/main.py
${relativeFileDirname} 当前文件所在目录相对于工作区根目录的路径 src
${fileBasename} 当前文件的基本名(含扩展名) main.py
${fileBasenameNoExtension} 当前文件的基本名(不含扩展名) main
${fileDirname} 当前文件所在的目录路径 /home/user/myproject/src
${fileExtname} 当前文件的扩展名(包含点) .py
${lineNumber} 当前光标所在的行号(在调试中常用) 10
${selectedText} 当前选中的文本 def hello()
${execPath} VS Code 可执行文件的路径 /usr/bin/code
${pathSeparator} 系统的路径分隔符(Windows 是 \,其他是 / /

一个简单的用于GCC编译C语言文件的tasks.json

{
"version":"2.0.0",//这是固定的,所有任务都要写这行
    
"tasks":[
	{
		"label":"构建一个可执行.c 文件",//任务显示名称,可以随便写自己想看到的东西
        
		"type":"shell",// 任务类型

    	"command":"gcc",//使用GCC编译
        "args":["${file}","-o","${fileBasenameNoExtension}"],
        
    	"group":{
        	"kind":"build",//任务分组
        	"isDefault":"true"
    		},
        "presentation": {
   			 "reveal": "always",     
  			  "panel": "shared",      
  			  "clear": false,         
   			 "focus": false    
},
    	"problemMatcher":"$gcc"//解析错误输出
	}
]
}
二.launch.json

决定文件怎么执行,怎么调试

可以通过preLaunchTash与tasks串联起来(这个命令就是在调试前自动执行构建任务)

1.基本框架

{
    "version": "0.2.0",          // 固定版本号
    "configurations": [          // 调试配置数组,可以定义多个
        { /* 配置1 */ },
        { /* 配置2 */ }
    ],
    "compounds": []              // 可选,同时启动多个配置,本文不涉及这个参数
}
参数详解
  • 带绿色√或者黄色标注的为必填项
name string 在调试下拉菜单中显示的名称
type string 调试器类型(如 nodepythoncppdbgchrome
request string launch(启动新进程)或 attach(附加到已有进程)
program string 多数需要 要调试的可执行文件或脚本的路径
args array 传递给程序的命令行参数
cwd string 当前工作目录,默认 ${workspaceFolder}
env object 环境变量
preLaunchTask string 调试前运行的任务(对应 tasks.json 中的 label
postDebugTask string 调试结束后运行的任务
stopAtEntry boolean 是否在程序入口处暂停(默认 false)
console string 控制台类型:internalConsoleintegratedTerminalexternalTerminal
internalConsoleOptions string neverOpen / openOnSessionStart

  • name:显示名称,作用类似tasks.json里的label

  • type:选择调试器类型,以下是从网络搜集的常见值

type 值 对应的调试器/环境 需要安装的扩展
"python" Python 程序(使用 debugpy) Python (ms-python.python)
"cppdbg" C/C++ 程序(使用 GDB/LLDB) C/C++ (ms-vscode.cpptools)
"node" Node.js 程序 内置(无需额外安装)
"chrome""pwa-chrome" 调试前端 JavaScript(在 Chrome/Edge 中) 内置或 Debugger for Chrome
"dotnet" .NET Core / .NET 5+ 程序 C# (ms-dotnettools.csharp)
"java" Java 程序 Debugger for Java (vscjava.vscode-java-debug)
"go" Go 程序 Go (golang.go)
"rust" Rust 程序 rust-analyzer(自带调试支持)或 CodeLLDB
"msedge" 在 Edge 浏览器中调试 内置
"firefox" 在 Firefox 中调试 Debugger for Firefox
  • request:指定调试器如何链接程序,有两种取值 “launch”“attach”

launch:直接启动程序,并加载调试器(比较常用),通常要配合prelaunchtask使用

attach:用调试器连接一个已经启动的程序,并不负责启动

  • program(一般是要写,但是当request选择了attach是可以忽略):

指定要调试的文件路径,调试器会启动它并且附加调试器

一般用预定义变量(见tasks,json部分附注的可变参量)

给个例子

"program": "${workspaceFolder}/main.exe",
  • args, env, cwd:作用和tasks里一样,不同的是args传递给的是program

  • preLaunchTask:预启动任务,就是在调试之前先编译一个任务

传入的值应该和tasks里的label的值一致

  • console:决定被调试程序的输入和输出

  • 可选值

    • "internalConsole" – VS Code 自带的“调试控制台”(只显示输出,不能输入,比如无法使用 scanfinput()
    • "integratedTerminal" – VS Code 下方的集成终端(支持输入,推荐)
    • "externalTerminal" – 弹出一个单独的系统终端窗口(支持输入,但会切换窗口)

    推荐使用中间那个

  • stopAtEntry:是否在程序入口点自动暂停(即停在 main 函数的第一行或脚本的第一行)

有两个布尔类型值,即true or false

true:调试启动后停止在入口

false:程序运行到第一个断断点,没断点就一直运行

  • postDebugTask:调试结束后运行的第一个任务(一般没用)

    给个例子,用于清理

    "postDebugTask": "Cleanup"
    

三.settings.json

工作区配置各种插件

配置字体,缩进,保存时格式化等操作,当团队协作时十分重要(但本人一般不喜欢配置这个,一般使用默认配置)

本文略说

如何创建?

  1. 打开命令面板Ctrl+Shift+P
  2. 输入并选择Preferences: Open Workspace Settings (JSON)(工作区设置)或 Preferences: Open User Settings (JSON)(用户设置)
  3. 直接编辑保存。

由于没写过,所以寻求DEEPSEEK写了两个常见的配置

场景1:Python 项目(统一用 4 空格缩进,保存时用 Black 格式化)

json

{
    "editor.tabSize": 4,
    "editor.insertSpaces": true,
    "files.autoSave": "afterDelay",
    "[python]": {
        "editor.formatOnSave": true,
        "editor.defaultFormatter": "ms-python.black-formatter"
    },
    "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
    "files.exclude": {
        "**/__pycache__": true,
        "**/.pytest_cache": true
    }
}

场景2:C/C++ 项目(MinGW 环境,4 空格缩进)

json

{
    "editor.tabSize": 4,
    "editor.formatOnSave": false,
    "files.associations": {
        "*.h": "c"
    },
    "C_Cpp.default.compilerPath": "D:/J_tools/mingw64/bin/gcc.exe",
    "C_Cpp.default.includePath": [
        "${workspaceFolder}/**",
        "D:/J_tools/mingw64/include"
    ],
    "C_Cpp.default.cStandard": "c11",
    "C_Cpp.default.cppStandard": "c++17",
    "files.exclude": {
        "**/*.exe": true
    }
}

更多推荐