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


 

写一个外部命令的调用

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

这里以我博客中使用的外部命令 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,然后基于它修改。

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

  • 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
}
}

参考资料

基于 task 为 VSCode 添加自定义的外部命令的更多相关文章

  1. PHP在linux上执行外部命令

    PHP在linux上执行外部命令 一.PHP中调用外部命令介绍二.关于安全问题三.关于超时问题四.关于PHP运行linux环境中命令出现的问题 一.PHP中调用外部命令介绍在PHP中调用外部命令,可以 ...

  2. 安装好grunt,cmd 提示"grunt不是内部或外部命令" 怎么办?

    Grunt和所有grunt插件都是基于nodejs来运行的,因此,必须安装node.js. (一) 去官网http://nodejs.org/ 下载安装包 node-v6.9.2.msi,直接点击安装 ...

  3. PHP 执行系统外部命令 system() exec() passthru()

    区别: system() 输出并返回最后一行shell结果. exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面. passthru() 只调用命令,把命令的运 ...

  4. scala调用外部命令

     scala调用外部命令 1.  导入sys.process包 2. 调用方式:" 外部命令 " !     双引号内+外部命令+感叹号 例:     scala调用外部命令工作原 ...

  5. PHP调用外部命令

    ------------------------------------------------------------------ 一.PHP调用外部命令总结                     ...

  6. 基于Mono和VSCode打造轻量级跨平台IDE

      近期Visual Studio推出Mac版本号的消息迅速在技术圈里刷屏,当project师们最喜欢的笔记本电脑Mac,邂逅地球上最强大的集成开发环境Visual Studio的时候,会碰撞出如何精 ...

  7. 20155228 基于VirtualBox安装Ubuntu和学习linux命令的学习经历和心得

    一.虚拟机VirtualBox的下载安装 基于VirtualBox虚拟机安装Ubuntu图文教程 虽然娄老师的教程对于VirtualBox的下载安装讲的很简单,可以说是一笔带过,但是我在下载安装的过程 ...

  8. php -- PHP在linux上执行外部命令,system(),exec(),shell_exec()

    目录:一.PHP中调用外部命令介绍二.关于安全问题三.关于超时问题四.关于PHP运行linux环境中命令出现的问题 一.PHP中调用外部命令介绍 在PHP中调用外部命令,有三种方法: 1. 调用专门函 ...

  9. grunt 不是内部或外部命令,也不是可运行的程序或批处理文件

    问题1 grunt 不是内部或外部命令,也不是可运行的程序或批处理文件 解决方法: Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. 安装CLI 在继 ...

随机推荐

  1. git branch 新建,推送与删除

    在开发的许多时候我们都需要使用git提供的分支管理功能. 1.新建本地分支:git checkout -b test  新建一个名为:test 的本地分支. 2.提交本地分支:git push ori ...

  2. python学习使用

    静态变量:函数执行完不释放的变量 python的类中 __init__相当于构造函数.

  3. LR----实现WebService测试

    测试WebService时,需要导入WSDL:同SoapUI WSDL:http://ws.webxml.com.cn/webservices/DomesticAirline.asmx?wsdl 场景 ...

  4. JS判断键盘上的上下左右键

    document.onkeydown=function(event){ var e = event || window.event || arguments.callee.caller.argumen ...

  5. shiro:10个过滤器;10个jsp标签;5个@注解

    10个过滤器 过滤器简称 对应的java类 anon org.apache.shiro.web.filter.authc.AnonymousFilter authc org.apache.shiro. ...

  6. 二十四、DBMS_SQL

    1.概述 1) 在整个程序的设计过程中,对游标的操作切不可有省略的部分,一旦省略其中某一步骤,则会程序编译过程既告失败,如在程序结尾处未对改游标进行关闭操作,则在再次调用过程时会出现错误. 2) db ...

  7. bzoj3000

    题解: n!k进制的位数 首先考虑n!十进制的位数 =log10(n!) 然后用阶乘近似公式 继而换底 得到答案 代码: #include<bits/stdc++.h> using nam ...

  8. MySQL pt-table-checksum及pt-table-sync校验及修复主从一致性

    [pt-table-checksum]pt-table-checksum是percona-toolkit系列工具中的一个, 可以用来检测主. 从数据库中数据的一致性.其原理是在主库上运行, 对同步的表 ...

  9. Annotation方式实现AOP

    1.添加其他jar包 2.配置applicationContext.xml文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <?xml version=&quo ...

  10. C++设计模式之-建造者模式

    建造者模式的定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示(DP).<大话设计模式>举了一个很好的例子——建造小人,一共需建造6个部分,头部.身体.左右手.左 ...