基於 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 } }

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM