我可以在 vs 代码中为一种以上的语言配置 task.json 文件吗?

Can I configure a task.json file for more then one language in vs code?

我想在 VS Code 中将 tasks.json 文件配置为 运行 python 和 java 代码,只需按:

Python 和 Java 已配置,但需要两个不同的 tasks.json 文件。

但我只能在 .vscode 文件夹中保留一个 tasks.json 文件。

如何将两个配置文件合并到一个 tasks.json 文件中?

对于Python:

{
  "version": "2.0.0",
  "tasks": [{
    "label": "Compile and run",
    "type": "shell",
    "command": "",
    "args": [
      "/usr/bin/time",
      "-v",
      "--output",
      "sys.txt",
      "timeout",
      "5",
      "python3",
      "${relativeFile}",
      "<",
      "input.txt",
      ">",
      "output.txt",
    ],
    "group": {
      "kind": "build",
      "isDefault": true
    },
    "problemMatcher": {
      "owner": "py",
      "fileLocation": [
        "relative",
        "${workspaceRoot}"
      ],
      "pattern": {
        "regexp": "^(.*):(\d+):(\d+):\s+(warning|error):\s+(.*)$",
        "file": 1,
        "line": 2,
        "column": 3,
        "severity": 4,
        "message": 5
      }
    }
  }],


}

对于Java:

{
  "version": "2.0.0",
  "tasks": [{
    "label": "Compile and run",
    "type": "shell",
    "command": "",
    "args": [
      "/usr/bin/time",
      "-v",
      "--output",
      "sys.txt",
      "timeout",
      "5",
      "java",
      "${relativeFile}",
      "<",
      "input.txt",
      ">",
      "output.txt",
    ],
    "group": {
      "kind": "build",
      "isDefault": true
    },
    "problemMatcher": {
      "owner": "java",
      "fileLocation": [
        "relative",
        "${workspaceRoot}"
      ],
      "pattern": {
        "regexp": "^(.*):(\d+):(\d+):\s+(warning|error):\s+(.*)$",
        "file": 1,
        "line": 2,
        "column": 3,
        "severity": 4,
        "message": 5
      }
    }
  }],
}

很简单,您只需合并 "tasks":[] 数组并唯一地命名您的任务。任务数组可以包含任意数量的任务对象,有些也可以相互依赖。 More info on VSCode Tasks

在这里,当您使用它和 CTRL + SHIFT + B 时,它会显示 select 任务的选项。

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Compile and run Python",
            "type": "shell",
            "command": "",
            "args": [
                "/usr/bin/time",
                "-v",
                "--output",
                "sys.txt",
                "timeout",
                "5",
                "python3",
                "${relativeFile}",
                "<",
                "input.txt",
                ">",
                "output.txt"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": {
                "owner": "py",
                "fileLocation": ["relative", "${workspaceRoot}"],
                "pattern": {
                    "regexp": "^(.*):(\d+):(\d+):\s+(warning|error):\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        },
        {
            "label": "Compile and run Java",
            "type": "shell",
            "command": "",
            "args": [
                "/usr/bin/time",
                "-v",
                "--output",
                "sys.txt",
                "timeout",
                "5",
                "java",
                "${relativeFile}",
                "<",
                "input.txt",
                ">",
                "output.txt"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": {
                "owner": "java",
                "fileLocation": ["relative", "${workspaceRoot}"],
                "pattern": {
                    "regexp": "^(.*):(\d+):(\d+):\s+(warning|error):\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        }
    ]
}

因为无法根据文件扩展名 (See Issue here) 告诉 VSCode 哪个任务 运行。

您始终可以为构建任务创建键盘快捷键并执行它,而无需从弹出窗口中 select。例如,对于下面的 tasks.json,您可以通过将其添加到 keybindings.json 文件来创建快捷方式。

[{
  "key": "ctrl+alt+h",
  "command": "workbench.action.tasks.runTask",
  "args": "Compile and run Python" // this text should match exactly with task "label"
}]

如果您打开了 java 或 python 文件(并且按照@tHeSID 的建议“合并”了两个任务),您可以重载键绑定 ala:

  {
    "key": "ctrl+shift+B",
    "command": "workbench.action.tasks.runTask",
    "args": "Compile and run Python",
    "when": "editorLangId == python"
  },
  {
    "key": "ctrl+shift+B",
    "command": "workbench.action.tasks.runTask",
    "args": "Compile and run Java",
    "when": "editorLangId == java"
  },

以防其他人登陆这里。

这在 https://github.com/microsoft/vscode/issues/88106

中得到解决