文章目录

  • 变量引用
  • Multi-selections(multi-cursor)
  • Column (box) selection
  • 在正则表达式替换中改变大小写
  • tasks.json
  • launch.json

vscode工作空间下有一个.vscode文件夹,该文件夹下放置了vscode的配置文件,主要有:

  • settings.json : vscode的设置,配置IntelliSense
  • task.json : 配置编译选项
  • launch.json : 配置debugger

变量引用

预定义变量
${userHome} – 用户家目录
${workspaceFolder} – vscode打开的文件夹
${workspaceFolderBasename} – vscode打开的文件夹的名字,不包含任何/
${file} – 当前激活文件的绝对路径
${fileWorkspaceFolder} – 当前打开的文件的工作空间文件夹
${relativeFile} – 当前激活文件相对workspaceFolder的相对路径
${relativeFileDirname} – 当前打开的文件相对于workspaceFolder的相对路径
${fileBasename} – 当前激活文件的文件名,带后缀
${fileBasenameNoExtension} – 当前激活文件的文件名,不带后缀
${fileExtname} – 当前激活文件的后缀
${fileDirname} – 当前激活文件所在的文件夹路径,最近一层文件夹
${fileDirnameBasename} – 当前激活文件所在文件夹的名字
${cwd} – VS Code启动时任务运行器的当前工作目录
${lineNumber} – 当前激活文件光标所在的行号
${selectedText} – 在激活状态的文件中所选中的文字
${execPath} – vscode可执行程序的绝对路径
${defaultBuildTask} – the name of the default build task
${pathSeparator} – 文件路径中用来分割各部分的符号 / on macOS or linux, \ on Windows
${env:PATH} – 系统中的环境变量

可以通过${config:Name}引用vscode设置变量,例如:${config:editor.fontSize}

tasks.json中不是所有的值都支持变量替换。具体来说,只有commandargsoptions支持变量替换。在inputs部分的输入变量将不会被解析,因为不支持输入变量嵌套。

检查变量运行时值的一个简单方法是创建一个VS Code任务,将变量值输出到控制台。例如,要查看${workspaceFolder}的解析值,您可以在tasks.json中创建并运行(Terminal > run Task)以下简单的echo任务

{"version": "2.0.0","tasks": [{"label": "echo","type": "shell","command": "echo ${workspaceFolder}"}]}

Multi-selections(multi-cursor)

Alt + Click: 手动添加多光标
Shift + Alt + Down: 将光标插入下方
Shift + Alt + Up: 将光标插入上方
Ctrl + Shift + L: 自动化在每一个所选文本出添加一个光标

Column (box) selection

Shift + Alt+鼠标拖拽

在正则表达式替换中改变大小写

VS Code支持在搜索和替换时更改正则表达式匹配组的大小写,这是通过修饰符\u \U \l \L完成的,其中\u\l将大写/小写单个字符,而\U\L将大写/小写匹配组的其余部分。例如,\u\u\u$1将把匹配组的前三个字符大写,或者\l\U$1将把第一个字符小写,其余字符大写。匹配组由替换字符串中的$n引用,其中n是匹配组的顺序。

tasks.json

{"tasks": [{"type": "cppbuild","label": "C/C++: g++.exe build active file","command": "C:\\msys64\\ucrt64\\bin\\g++.exe","args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "Task generated by Debugger."},{"label": "Run tests","type": "shell","command": "./scripts/test.sh","windows": {"command": ".\\scripts\\test.cmd"},"group": "test","presentation": {"reveal": "always","panel": "new"}}]}],"version": "2.0.0"}
  • label: 是你将会在任务列表中看到的任务名称
  • type: 任务类型,对于自定义任务,可以是shellprocess。如果是shellcommand会被解释为shell命令 (for example: bash, cmd, or PowerShell)。如果是processcommand会被解释为要执行的程序。
  • command: 执行的实际命令,在本例中是g++
  • args数组指定将传递给command的参数。
  • 操作系统特定属性
    • windows: 在Windows操作系统上替换全局作用域定义的默认属性。
    • linux: 在Linux操作系统上替换全局作用域定义的默认属性。
    • osx: 在MacOs操作系统上替换全局作用域定义的默认属性。
  • group: 定义任务属于哪个组。在本例中,任务属于build组,在命令面板中运行Run Build Task会执行属于build组的任务。类似的还有test测试组。
  • detail是任务列表中任务的描述。强烈建议重命名此值,以将其与类似的任务区分开来
  • presentation: 定义如何在用户界面中处理任务输出。在本例中,显示输出的集成终端总是显示出来,并且在每次运行任务时都会创建一个新终端
  • options: Override the defaults for cwd (current working directory), env (environment variables), or shell (default shell). Options can be set per task but also globally or per platform. Environment variables configured here can only be referenced from within your task script or process and will not be resolved if they are part of your args, command, or other task attributes.
  • runOptions: 定义任务何时以及如何运行

play按钮将从tasks.json中读取数据,来获取如何构建和运行程序的信息。您可以在tasks.json中定义多个构建任务。标记为默认值的任务将由play按钮使用。如果需要更改默认编译器,可以在命令面板中运行Tasks: Configure default Build Task或者修改tasks.son文件,并通过替换此段来删除默认值:

"group": {"kind": "build","isDefault": true},

替换为

"group": "build",

第一个任务告诉g++获取活动文件${file},编译它,并在当前目录${fileDirname}中创建一个可执行文件,该文件的名称与活动文件相同,但扩展名为.exe (${fileBasenameNoExtension}.exe)。

launch.json

{"configurations": [{"name": "C/C++: g++.exe build and debug active file","type": "cppdbg","request": "launch","program": "${fileDirname}\\${fileBasenameNoExtension}.exe","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "C:\\msys64\\ucrt64\\bin\\gdb.exe","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "Set Disassembly Flavor to Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}],"preLaunchTask": "C/C++: g++.exe build active file"}],"version": "2.0.0"}

program指定要调试的程序
args属性是一个在运行时传递给程序的参数数组
stopAtEntry等于true会在main函数暂停