基於 task 爲 VSCode 添加自定義的外部命令

我們有很多全局的工具能在各處使用命令行調用,針對某個倉庫特定的命令可以放到倉庫中。不過,如果能夠直接爲順手的文本編輯器添加自定義的外部命令,那麼執行命令只需要簡單的快捷鍵即可,不需要再手工敲了。


寫一個外部命令的調用

由於是調用外部工具,所以工具本身用什麼語言寫已經不重要的了,只要有環境,沒有什麼是不能執行的。

這裏以我博客中使用的外部命令 mdmeta 爲例。我將此工具使用 mklink 命令鏈接到了 /build 文件夾中(當然,如果需要多人協作開發,可以使用 git-lfs 或者 git-submodule 來管理僅項目的外部命令)。關於 mklink 的使用,可以參考 解決 mklink 使用中的各種坑(硬鏈接,軟鏈接/符號鏈接,目錄鏈接)

於是,在 /build 文件夾中添加可執行的腳本,例如:

dotnet build\mdmeta\mdmeta.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
    }
}

參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章