从零手写VSCODE 配置文件
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 | ✅ | 调试器类型(如 node、python、cppdbg、chrome) |
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 | ❌ | 控制台类型:internalConsole、integratedTerminal、externalTerminal |
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 自带的“调试控制台”(只显示输出,不能输入,比如无法使用scanf或input())"integratedTerminal"– VS Code 下方的集成终端(支持输入,推荐)"externalTerminal"– 弹出一个单独的系统终端窗口(支持输入,但会切换窗口)
推荐使用中间那个
-
stopAtEntry:是否在程序入口点自动暂停(即停在
main函数的第一行或脚本的第一行)
有两个布尔类型值,即true or false
true:调试启动后停止在入口
false:程序运行到第一个断断点,没断点就一直运行
-
postDebugTask:调试结束后运行的第一个任务(一般没用)
给个例子,用于清理
"postDebugTask": "Cleanup"
三.settings.json
工作区配置各种插件
配置字体,缩进,保存时格式化等操作,当团队协作时十分重要(但本人一般不喜欢配置这个,一般使用默认配置)
本文略说
如何创建?
- 打开命令面板:
Ctrl+Shift+P - 输入并选择:
Preferences: Open Workspace Settings (JSON)(工作区设置)或Preferences: Open User Settings (JSON)(用户设置) - 直接编辑保存。
由于没写过,所以寻求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
}
}
更多推荐
所有评论(0)