vscode

launch.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0", // 版本号
"configurations": [
{
"name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg", // 调试器类型, cppdbg for C/C++, Node debugger for node, php for PHP, go for GO
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"program": "${fileDirname}\\bin\\${fileBasenameNoExtension}.out", // 可执行文件的路径, 需要自己创建 bin 文件夹
"args": [], // 调试参数
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
"cwd": "${workspaceFolder}", // 调试程序时的工作目录,一般为${workspaceFolder}即代码所在目录
"environment": [], // 当前项目环境变量
"externalConsole": false, // 调试时是否显示控制台窗口,设置为true显示控制台, 但是可能会一闪而过
// "MIMode": "gdb", // 调试器模式/类型
// "miDebuggerPath": "D:/Coding/mingw64/bin/gdb.exe", // 调试器的位置
"preLaunchTask": "build", // 调试前编译任务名称, 该值需要与tasks.json中的label相同,否则调试时会提示找不到
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}

tasks.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"tasks": [
// 可以有多个任务
{
"type": "shell", // 编译任务的类型,通常为shell/process类型
"label": "build", // 编译任务名, 需要与launch.json中的preLaunchTask保持一致,否则调试时会提示找不到;
"command": "D:\\Coding\\mingw64\\bin\\gcc.exe", // 编译命令 -> "cd build && cmake ../ && make", shell 编译命令,做并运算,即前一命令执行失败,则后一命令也不执行
"args": [
"-g", // 该参数使编译器在编译的时候产生调试信息
"${workspaceFolder}/${fileBasename}", // 被编译文件,通常为.cpp/.c/.cc文件等
"-Wall", // 开启额外警告
"-I", // include path指令
"/usr/include",
"-L", // lib路径
"/usr/lib/x86_64-linux-gnu",
"-l", // 链接库文件1
"opencv_core",
"-l", // 链接库文件2
"opencv_highgui",
"-o", // 生成指定名称的可执行文件, 默认为a.exe(a.out)
"${fileDirname}\\bin\\${fileBasenameNoExtension}.out" /* -g hello.cpp -I/usr/include -L/usr/lib/x86_64-linux-gnu -lopencv_core -o hello.out */
],
"options": {
// 其他命令选项
"cwd": "${fileDirname}" // 已执行程序或脚本的当前工作目录。如果省略,则使用代码的当前工作区根
},
"problemMatcher": [
// 已执行程序或脚本的当前工作目录。如果省略,则使用代码的当前工作区根
"$gcc" // 设置捕获错误的工具
],
"group": {
"kind": "build", // 任务的执行组。 build: 将任务标记为可通过 "运行生成任务" 命令访问的生成任务。
"isDefault": true // 定义此任务是组中的默认任务,还是与应触发此任务的文件匹配的 glob。
}
},
{
"label": "cmakebuild",
"type": "shell",
"command": "cd build && cmake ../ && make", // shell 编译命令,做并运算,即前一命令执行失败,则后一命令也不执行
"args": []
}
],
"version": "2.0.0"
}

预定义变量解释

1
2
3
4
5
6
7
8
9
10
${workspaceFolder} : 表示当前workspace文件夹路径,如C:\Users\admin\Desktop\test
${workspaceRootFolderName} : 表示workspace的文件夹名,如test
${file} : 文件自身的绝对路径,如C:\Users\admin\Desktop\test\.vscode\launch.json
${relativeFile} : 文件在workspace中的路径,如.vscode\launch.json
${fileBasenameNoExtension} : 当前文件的文件名,不带后缀,如hello/launch
${fileBasename} : 当前文件的文件名,如 hello.cpp/launch.json等
${fileDirname} : 文件所在的文件夹路径,也即C:\Users\admin\Desktop\test\.vscode
${fileExtname} : 当前文件的后缀,也即.json
${lineNumber} : 当前文件光标所在的行号
${env:PATH} : 系统中的环境变量

用户代码片段

占位符

占位符是带有值的制表符,如 .将插入并选择占位符文本,以便可以轻松更改。说白了占位符${1:foo}就是在$1 的基础上,光标跳到$1 位置的同时会自动生成并选中 foo,同样按 Tab 键切换到$2 的位置。占位符可以嵌套,如 。${1:foo} ${1:another ${2:placeholder}}

选择

占位符可以作为有选择的值。语法是以逗号分隔的值的枚举,用竖线字符括起来,例如 。插入代码段并选择占位符时,选项将提示用户选取其中一个值。${1|one,two,three|}

变量

插入变量的值。如果未设置变量,则插入其默认值或空字符串。当变量未知(即未定义其名称)时,将插入变量的名称并将其转换为占位符。$name ${name:default}可以使用以下变量:

  • TM_SELECTED_TEXT 当前选定的文本或空字符串
  • TM_CURRENT_LINE 当前行的内容
  • TM_CURRENT_WORD 光标下单词的内容或空字符串
  • TM_LINE_INDEX 基于零索引的行号
  • TM_LINE_NUMBER 基于一个索引的行号
  • TM_FILENAME 当前文档的文件名
  • TM_FILENAME_BASE 不带扩展名的当前文档的文件名 (比如这里你在用户代码片段中写了${TM_FILENAME_BASE},在自动生成的代码里就会在这个位置自动填充上你的文件的不含扩展名的文件名)
  • TM_DIRECTORY 当前文档的目录
  • TM_FILEPATH 当前文档的完整文件路径
  • RELATIVE_FILEPATH 当前文档的相对(相对于打开的工作空间或文件夹)文件路径
  • CLIPBOARD 剪贴板的内容
  • WORKSPACE_NAME 打开的工作区或文件夹的名称
  • WORKSPACE_FOLDER 打开的工作区或文件夹的路径

要插入当前日期和时间:

  • CURRENT_YEAR 本年度
  • CURRENT_YEAR_SHORT 本年度的最后两位数
  • CURRENT_MONTH 以两位数字表示的月份(例如”02”)
  • CURRENT_MONTH_NAME 月份的全名(例如”七月”)
  • CURRENT_MONTH_NAME_SHORT 月份的短名称(例如”Jul”)
  • CURRENT_DATE 以两位数字表示的月份中的某一天(例如”08”)
  • CURRENT_DAY_NAME 日期的名称(例如”星期一”)
  • CURRENT_DAY_NAME_SHORT 日期的短名称(例如”星期一”)
  • CURRENT_HOUR24 小时制格式的当前小时
  • CURRENT_MINUTE 当前分钟为两位数
  • CURRENT_SECOND 当前第二位为两位数
  • CURRENT_SECONDS_UNIX 自 Unix 纪元以来的秒数

对于插入随机值:

  • RANDOM6 个随机的 Base-10 数字
  • RANDOM_HEX6 个随机的 16 位基本数字
  • UUIDA 版本 4 UUID