加载中...
返回

VSCode tasks简介

近来与VSCode打交道颇多,偶然认识了其 Tasks 特性,很觉得对效率提升大有裨益,浅做一记,以备后用。

所谓 Tasks ,实际上就是一组快捷命令的组合,将我们常用的操作整理为一个集合,一键式执行,可以极大地减少手动的命令输入和记忆成本。

在VSCode工作区根目录 .vscode 文件夹下创建 tasks.json 文件,写入第一个快捷指令:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
      {
        "label": "Run tests",
        "type": "shell",
        "command": "echo 'Hello world'",
        "group": "test",
        "presentation": {
          "reveal": "always",
          "panel": "new"
        }
      }
    ]
}

从菜单栏【Terminal】–【Run task】手动打开任务栏(或自己绑定快捷键):

运行!

实际场景:一键编译

见到了SHELL语句的自动执行后,很容易就能在实际生产中用上这个特性,毕竟,SHELL语句本身是支持分隔符的( ; ),即使对 Tasks 的高端用法没什么了解,直接把一堆命令拼到一起,把 task 当快捷键用,也足以覆盖很多的生产场景了。

例如,我打开了一个小项目,其中只有一份源文件和一份CMake文件,希望在这个项目根目录下创建一个 build 目录,并且自动完成 cmakemake ,那么我会写一个这样的 task

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "compile project",
            "type": "shell",
            "command": "mkdir -p build; cd build; rm -r ./*; cmake ..; make;",
            "options": {
                "cwd": "${workspaceFolder}/exp-bit-field"
            }
        }
    ]
}

它的运行效果是:

现在,我们的项目路径底下就创建好了一个 build ,并且已经完成了编译:

这里的Demo看着比较简单,但实际上这样的命令组合在工作中是经常见到的,例如我就经常需要指定一堆环境变量并运行某个路径下的某个脚本,虽然其内容是固定的,但记忆和输入的成本实在太高,自有了 Tasks 之后,舒适度简直不知道提高了多少。

实际场景:在task中使用外部输入

在上面的一键编译的Demo中,我们通过 options 指定了工作路径在 ${workspaceFolder} 下的 exp-bit-field 目录,因此 build 的创建、 cmake 语句的执行都以此目录为基准。

考虑这样的场景:项目中不止一个工作目录,需要在不同目录间切换并执行类似的快速编译动作,则是否需要编写若干 task ,每个 task 对应一个目录?

答案是否定的,我们可以利用外部输入来达到灵活指定工作目录的目的。

tasks.json 中设置一个输入,指定其类型为 promptString ,设置描述和默认值,然后在 options.cwd 当中使用这个输入:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "inputs": [
        {
            "id": "workdir",
            "type": "promptString",
            "description": "work directory to execute compile command",
            "default": "exp-"
        }
    ],
    "tasks": [
        {
            "label": "compile project",
            "type": "shell",
            "command": "mkdir -p build; cd build; rm -r ./*; cmake ..; make;",
            "presentation": {
                "reveal": "always"
            },
            "options": {
                "cwd": "${workspaceFolder}/${input:workdir}"
            }
        }
    ]
}

现在运行任务时,会优先要求我们输入工作目录:

并在我们指定的路径下执行一系列命令:

小结

其实本文只是对VSCode Tasks特性进行了极浅显的介绍,但其中内容已基本覆盖了我个人工作中触及的所有场景。当下我可以自己指定需要拉取代码的分支、需要执行编译命令的本地路径,已经完美地规避了大段大段的命令记忆和输入,能够更加集中在开发工作身上。

参考资料

[1] https://marketplace.visualstudio.com/items?itemName=augustocdias.tasks-shell-input#:~:text=Currently%2C%20VSCode%20supports%203%20types%20of%20inputs%20for,used%20as%20a%20possible%20input%20for%20your%20task.

[2] Variables Reference, https://code.visualstudio.com/docs/editor/variables-reference

[3] Tasks in Visual Studio Code, https://code.visualstudio.com/docs/editor/tasks

[4] VSCode中Task的使用, https://blog.csdn.net/qq_53653262/article/details/120859147

有朋自远方来,不亦说乎?
Built with Hugo
Theme Stack designed by Jimmy