适用于多语言的VScode配置教程:同一文件夹内支持C++, JAVA, Python
前言
VScode作为一款强大的文本编辑器,只要配置恰当,便可以同时在一个环境内编译多种语言的文件。本文简要给出一种同时支持C++, Python, Java的配置方式(windows平台)。
配置格式
1.创建工作区并建立如图的文件夹及文件结构
其中包括vscode的配置文件夹.vscode, 以及其他三个代码文件夹(包括存储编译后exe文件的bin子文件夹)
2.写入配置文件
.vscode\launch.json
{
"version": "0.2.0",
"configurations": [
{// C++ 调试配置
"name": "Debug C++", // 配置名称,可以任意修改,用于在调试配置列表中识别此配置
"type": "cppdbg", // 配置类型,C++调试器类型。cppdbg 是 VS Code 提供的用于 C++ 的调试类型
"request": "launch", // 请求配置类型,可以为 "launch"(启动新进程)或 "attach"(附加到已运行的进程)
"program": "${fileDirname}/bin/${fileBasenameNoExtension}.exe", // 将要调试的程序路径,${fileDirname} 是文件目录,${fileBasenameNoExtension} 是不带扩展名的文件名
"args": [], // 调试时传递的命令行参数,可以添加例如 ["arg1", "arg2"]
"stopAtEntry": false, // 是否在程序入口处暂停,可以为 true 或 false
"cwd": "${fileDirname}", // 调试时的工作目录,可以为项目根目录或其他指定目录
"environment": [], // 环境变量,可以添加例如 [{"name": "ENV_VAR", "value": "value"}]
"externalConsole": false, // 是否使用外部控制台,可以为 true 或 false。true 使用独立终端,false 使用内置终端
"internalConsoleOptions": "neverOpen", // 内置控制台选项,可以为 "neverOpen"(从不打开), "openOnSessionStart"(会话开始时打开), "openOnFirstSessionStart"(第一次会话开始时打开)
"MIMode": "gdb", // 调试器类型,可以为 "gdb" 或 "lldb"
"miDebuggerPath": "C:\\Program Files\\mingw64\\bin\\gdb.exe", // 调试器路径,指定调试器可执行文件的位置
"preLaunchTask": "build C++", // 调试前执行的任务,与 tasks.json 中的 label 对应
"setupCommands": [
{
"text": "-interpreter-exec console \"skip -gfi **/bits/*.h\"" // 设置调试时跳过标准库文件
}
]
},
{// Python 调试配置
"name": "Debug Python", // 配置名称,可以任意修改
"type": "debugpy", // 配置类型,Python 调试器类型。需要安装 Python 扩展
"request": "launch", // 请求配置类型,启动新进程
"program": "${file}", // 调试的 Python 程序,${file} 表示当前打开的文件
"console": "integratedTerminal" // 使用集成终端,可以为 "integratedTerminal" 或 "externalTerminal"
},
{// Java 调试配置
"name": "Debug Java", // 配置名称,可以任意修改
"type": "java", // 配置类型,Java 调试器类型。需要安装 Java 扩展
"request": "launch", // 请求配置类型,启动新进程
"mainClass": "${fileBasenameNoExtension}", // 主类,${fileBasenameNoExtension} 表示不带扩展名的文件名
"console": "integratedTerminal" // 使用集成终端,可以为 "integratedTerminal" 或 "externalTerminal"
}
]
}
.vscode\tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "clr",
"type": "shell",
"command": "cls",
"problemMatcher": []
},
{
"dependsOn": "clr",
"label": "build C++",
"type": "shell",
"command": "g++",
"args": [
"${file}",
"-o",
"${fileDirname}/bin/${fileBasenameNoExtension}.exe",
"-g",
"-Wall",
"-static-libgcc",
"-fexec-charset=UTF-8",
"-std=c++11"
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "new"
},
"problemMatcher": "$gcc"
},
{
"label": "run C++",
"dependsOn": "build C++",
"type": "shell",
"command": "${fileDirname}/bin/${fileBasenameNoExtension}.exe",
"group": {
"kind": "test",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": true,
"panel": "new"
},
"problemMatcher": []
},
{
"label": "debug C++",
"type": "shell",
"command": "code",
"args": [
"-g",
"${workspaceFolder}/${relativeFile}"
],
"group": {
"kind": "build",
"isDefault": false
},
"problemMatcher": [],
"dependsOn": "build C++"
},
{
"label": "run Python",
"type": "shell",
"command": "python",
"args": [
"${file}"
],
"group": {
"kind": "test",
"isDefault": false
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": true,
"panel": "shared"
},
"problemMatcher": []
},
{
"label": "debug Python",
"type": "shell",
"command": "code",
"args": [
"-g",
"${workspaceFolder}/${relativeFile}"
],
"group": {
"kind": "build",
"isDefault": false
},
"problemMatcher": []
},
{
"label": "build Java",
"type": "shell",
"command": "javac",
"args": [
"${file}"
],
"group": {
"kind": "test",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": false,
"panel": "shared"
},
"problemMatcher": {
"owner": "java",
"fileLocation": [
"relative",
"${fileDirname}"
],
"pattern": [
{
"regexp": "^(.*)$",
"message": 1
},
{
"regexp": "^\\s*at .+\\((.+):([0-9]+)\\)$",
"file": 1,
"line": 2
}
]
}
},
{
"label": "run Java",
"dependsOn": "build Java",
"type": "shell",
"command": "java",
"args": [
"${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"group": {
"kind": "test",
"isDefault": false
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": true,
"panel": "shared"
},
"problemMatcher": []
},
{
"label": "debug Java",
"dependsOn": "build Java",
"type": "shell",
"command": "code",
"args": [
"-g",
"${workspaceFolder}/${relativeFile}"
],
"options": {
"cwd": "${fileDirname}"
},
"group": {
"kind": "build",
"isDefault": false
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": true,
"panel": "shared"
},
"problemMatcher": []
}
]
}
快捷键配置文件副本:.vscode\keybindings.json.save
[
{
"key": "ctrl+f5",
"command": "workbench.action.tasks.runTask",
"args": "run C++",
"when": "resourceExtname == .cpp"
},
{
"key": "ctrl+f5",
"command": "workbench.action.tasks.runTask",
"args": "run Python",
"when": "resourceLangId == python"
},
{
"key": "ctrl+f5",
"command": "workbench.action.tasks.runTask",
"args": "run Java",
"when": "resourceLangId == java"
},
{
"key": "f5",
"command": "workbench.action.debug.selectandstart",
"when": "resourceExtname == .cpp"
},
{
"key": "f5",
"command": "workbench.action.debug.selectandstart",
"when": "resourceLangId == python"
},
{
"key": "f5",
"command": "workbench.action.debug.selectandstart",
"when": "resourceLangId == java"
},
{
"key": "f5",
"command": "-workbench.action.debug.continue",
"when": "debugState == 'stopped'"
}
]
3.配置快捷键
点按ctrl+k+s打开键盘快捷方式的配置界面
从配置界面的右上角点选按钮:打开键盘快捷方式(json)
将刚才的keybindings.json.save中的内容加入到全局的keybindings.json中,若之前未配置过可选择直接替换。
此时即可使用ctrl+F5进行快速编译运行c++,python,java任一语言,F5后选择对应语言的调试运行方式
(这是由于调试运行任务,vscode的command接口只有workbench.action.debug.selectandstart,无法直接选择运行,如有能够直接针对后缀名进行调试的方法,烦请评论告知)
至此配置完毕。