zoukankan      html  css  js  c++  java
  • 基于 task 为 VSCode 添加自定义的外部命令

    我们有很多全局的工具能在各处使用命令行调用,针对某个仓库特定的命令可以放到仓库中。不过,如果能够直接为顺手的文本编辑器添加自定义的外部命令,那么执行命令只需要简单的快捷键即可,不需要再手工敲了。


     

    写一个外部命令的调用

    由于是调用外部工具,所以工具本身用什么语言写已经不重要的了,只要有环境,没有什么是不能执行的。

    这里以我博客中使用的外部命令 mdmeta 为例。我将此工具使用 mklink 命令链接到了 /build 文件夹中(当然,如果需要多人协作开发,可以使用 git-lfs 或者 git-submodule 来管理仅项目的外部命令)。关于 mklink 的使用,可以参考 解决 mklink 使用中的各种坑(硬链接,软链接/符号链接,目录链接)

    于是,在 /build 文件夹中添加可执行的脚本,例如:

    dotnet buildmdmetamdmeta.dll wupdate --ignore-in-hour 6

    让 VSCode 使用此外部命令

    如果你说使用 VSCode 嵌入的终端来使用外部命令,那我们其实没做什么,就像使用普通的脚本或者命令一样。

    但是,VSCode 自带有 Tasks 机制,可以将命令与 VSCode 集成。关于 Tasks,可以阅读 VSCode 的官方文档:Tasks in Visual Studio Code

    具体来说,是写一个配置文件 /.vscode/tasks.json。

    tasks.json 中有少量的默认内容,如果你完全不知道如可开始编写,可以按 F1,选择 Configure ... 随便配置一个 Task,然后基于它修改。

    F1

    这里,我定义了两个命令:

    • Init Metadata
    • Update Metadata
    {
        // See https://go.microsoft.com/fwlink/?LinkId=733558
        // for the documentation about the tasks.json format
        "version": "2.0.0",
        "tasks": [
            {
                "label": "Init Metadata",
                "type": "shell",
                "command": "${workspaceRoot}\build\mdinit.ps1",
                "problemMatcher": []
            },
            {
                "label": "Update Metadata",
                "type": "shell",
                "command": "${workspaceRoot}\build\mdupdate.ps1",
                "problemMatcher": [],
                "group": {
                    "kind": "build",
                    "isDefault": true
                }
            }
        ]
    }

    当然,这是按照我自己的需求写了两个命令,前者用来初始化我的博客仓库,后者用来更新我所有博客文章的 YAML 元数据。

    由于后者才是需要频繁使用的命令,所以我将其设为编译类型的命令("kind": "build")。具体来说,设定为编译类型并指定为默认("isDefault": true)将获得 Ctrl+Shift+B 快捷键的原生支持。

    使用快捷键执行外部命令

    当然,如果你有其他的编译命令,或者你有很多个命令,可以自己指定快捷键。比如我希望按下 Ctrl+U 时更新我的元数据(即执行以上第二条命令),直接在命令上加上 "key": "ctrl+u" 即可。

    {
        "label": "Update Metadata",
        "type": "shell",
        "key": "ctrl+u",
        "command": "${workspaceRoot}\build\mdupdate.ps1",
        "problemMatcher": [],
        "group": {
            "kind": "build",
            "isDefault": true
        }
    }

    参考资料

  • 相关阅读:
    python学习第十五天
    python学习第十三、十四天
    python学习第十二天
    python学习第j十一天
    python学习第十天
    ViewController push的自定义动画
    iOS 判断设备是否越狱
    iOS
    OBJC字面量
    ios8 share Extension 分享扩展
  • 原文地址:https://www.cnblogs.com/walterlv/p/10236428.html
Copyright © 2011-2022 走看看