这一篇讲vscode插件中最基础的命令。命令可以触发vscode中的各种行为。命令无处不在,每个快捷键被按下时其实就是执行了一条命令。官方教程链接:https://code.visualstudio.com/api/extension-guides/command

内置命令

主要的内置命令可以查看https://code.visualstudio.com/api/references/commands

对于一些简单的命令可以通过键盘快捷方式来查看
25dc2110549ff6a667b1c65e247dc41b.png
之后会新打开一个页面,展示了当前vscode中所有的命令
7e2944cd7a0b752c6894922edad630bf.png
在命令上按右键可以复制命令的ID (workbench.action.keybindingsReference)
e78f0a401246442849ddea5e86e8e3e2.png
通过这个ID我们就可以在命令面板中调用这条命令了。
2ad897ac019ed801130b558e41d2e425.png

自定义命令

阅读全文 »

前一篇通过项目生成器Yeoman快速生成了一个直接就能跑通的hello world插件。

这一篇我们来了解一下vscode插件的代码结构。下图是hello world插件的代码结构。

e0f1d00ea294d2224e8252b52282106b.png

  • .vscode文件夹是针对开发这个插件的vscode的配置,它配置了要怎样调试这个插件,我们可以不用管它,如果把它删除,那再按F5就不能调试了
  • node_modules文件夹存放了运行npm install后安装的所有依赖,相信写过前端项目的朋友都知道,如果在插件开发中发现有些库导入后总出错就有可能是相应的依赖有问题,最简单粗暴的解决方案就是把node_modules文件夹删除,然后重新运行npm install安装依赖
  • out文件夹是按F5调试时,由 TypeScript 编译器生成的最终的JavaScript代码,可以不用管它。
  • src文件夹存放了我们的代码文件,其中的test文件夹给出了一个通过Mocha测试框架编写单元测试的例子。虽然我一直是比较推崇用测试驱动开发(TDD)的方式来写代码,但对于界面经常要发生变化的前端项目,TDD的收益并不高。extension.ts是约定俗成的插件入口文件,其实可以在package.json中指定入口,没有特别的需求的话就按默认的来就可以了
  • .eslintrc.json是ESLint的配置文件,保持默认就可以了
  • .gitignore定义了git可以忽略的文件和文件夹,默认会忽略与源代码没有关系的node_modulesout等文件夹和临时文件
  • .vscodeignore这个文件与.gitignore类似,它定义了打包插件时可以忽略的文件和文件夹
  • CHANGELOG.md插件的更新日志,类似于下面这种,可以在插件的详情页看到,如果删去这个文件则不会显示该信息
    f2dca5f68a59cfdb2390fdcb9d4053d9.png
  • package-lock.json这个是执行npm install时自动生成的一个对当前安装的依赖信息的快照,前端的依赖更新变化非常快,通过它可以把我们所用的版本依赖锁定,这样就算换了新的环境也能把代码跑起来。
  • package.json是项目配置清单,在vscode插件开发中,除了常规的依赖配置、打包调试的命令设置外,还可以在该文件中设置插件各种状态信息和配置信息,大大简化了插件开发的难度
  • README.md就是对插件的介绍,类似于下图,可以在插件的详情页看到
    de9c08a693ec141e55b0f84d63b1b5ef.png
  • tsconfig.json TypeScript的配置文件,没有特别需求的话不用动它,如果在创建项目的时候选择 JavaScript就不会出现它了
  • vsc-extension-quickstart.md 这是新手指引,介绍了这个插件模板的一些特点,建议看看。觉得无用可以删除。

接下来说一说package.json吧。乍一看,vscode插件就是一个前端项目吧,其实不是,它和一般的前端项目还是有很大的不同的,它依赖于vscode api,有点像前端页面依赖于浏览器api。在package.json中我们可以声明事件、命令、界面、快捷键等各种vscode所能提供的能力。一般在看插件源码的时候,看过package.json就知道这个插件是做什么的了。

阅读全文 »

一恍又大半年没更新了,再不更新大家或许就会忘记我了吧。

最近四个月一直在开发一款vscode插件,目前已经开发完毕了,是一款测试脚本IDE插件,能够实现测试脚本的编写管理调试等功能。

界面如下:

ui自动化ide介绍.png

这个IDE插件是配合我写的嵌入式linux ui自动化测试核心来用的。整套工具应该是目前嵌入式linux上最强大的ui自动化测试工具了。大家如果感兴趣可以私聊我。

阅读全文 »

又好久不更新了,这几个月我一直很忙,进步很快,储备了不少新东西,有空时再把它们整理出来。

之前我写了一篇gocv结合opencv动态库的编译,现在来讲一下怎么实现opencv静态库的编译。那篇文章用的是gocv v0.29.0,在编译时存在很多问题,要手动改它的编译项,现在gocv 已经更新到了 v0.31.0,修复了这些问题,编译起来顺畅多了。

首先是安装mingw的编译环境,一定要注意要安装支持posix线程版的,如果装错了在编译的时候会出错。

下载地址:
https://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win32/Personal Builds/mingw-builds/8.1.0/

a27249039518445037cbb9fc3a279f37.png

阅读全文 »

gin是目前go生态中最流行的web框架了,简单易用。go语言的web框架都有个特点:简洁、精炼,你会发现它们不像其他的语言的框架,没有全家桶,说它是框架但又只提供了最基本的功能。

这既是优点也是缺点吧,优点是可以用最少的代码完成工作(包括框架本身的代码)不像其他语言,啥都没干呢就导了一堆东西。缺点是对新手不太友好,如果之前没有开发过web项目会比较难上手,这一点在文档和示例代码上也有所体现,也就是好像它什么都写了,但是实战的时候不知道怎么串起来。

上周找到一本《Building Distributed Applications in Gin》,这本书很好,相当于是gin的手把手教程了。接下来我会把学习过程中的一些想法、重点记录下来,方便自己查阅,也方便大家参考。

首先是装环境,go的安装看我之前写的那篇文章就行了,gin的安装很简单:

1
go get github.com/gin-gonic/gin
阅读全文 »

接着之前的文章梳理go切片中的容量和长度。

容量

切片中的每一个元素都存放在一块连续的内存中,每个切片都有它自己保留的一块内存,它的大小就是切片的容量。

通常切片的容量会比切片的长度要大,当切片容量和切片的长度一致时,若再用 append 向切片中添加新的元素,go运行时会申请一块更大容量的切片进行扩容。

并将原来切片中的元素复制到新的切片中,把新添加的元素放在其后。用新的切片代替原来的切片。原来的切片将被垃圾回收。

阅读全文 »

在go中使用opencv还是比较麻烦的,如果使用的是 mac 或 linux 还好,在windows下就比较痛苦。

GoCV 包提供了对 opencv 4.5.4 的支持,官方提供了一键安装的脚本。

对于 linux 和 mac 系统,直接按官方的教程就可以了,不会遇到太多问题。官方安装指南在这:
https://gocv.io/getting-started/linux/
https://gocv.io/getting-started/macos/

对于 windows 步骤相对比较复杂,它通过 MinGW 来编译,首先要安装 MinGW 以及 CMake ,直接安 MSYS2 也可以,不过最好还是和 GoCV 官方用的一致,装MinGW 7.3.0,因为接下来可以看到它的编译脚本里已经把目录写死了😂,如果不一致要自己改一下会比较麻烦😂。官方安装指南在这:https://gocv.io/getting-started/windows/

大体上的步骤都可以按官方文档里写的来,如果出错一般是环境没有配好,最好把 MinGW 下的 mingw64\bin 目录加到 PATH 环境变量中。编译 opencv 时可以改一下 GOPATH 下 \src\gocv.io\x\gocv 里的 win_build_opencv.cmd 文件,因为GitHub网络不稳定时常会下载失败,可以把图中标出来的两句删除语句注释掉,以防一遍又一遍的下载文件又删掉。

阅读全文 »

今天来梳理一下切片。

在go语言中,基本上任何需要保存一连串数据的地方都可以用切片。切片没有长度的限制。

切片与数组的操作相似。一对方括号加上类型就能定义一个切片了,看起来就像是在定义数组时没有写数组大小。

1
var x = []int{1, 2, 3}

指定某几个元素值,没指定的会置为零值:

阅读全文 »

参考《Qt5 C++ GUI Programming CookBook - Second Edition》中的《Chapter 5, OpenGL Implementation —— Setting up OpenGL in Qt》

在 Qt 中设置OpenGL

新建一个 Qt Widget 应用后需要在工程文件(.pro)中的 QT += core gui 后面添加 opengl即:

1
QT += core gui opengl

之后添加库依赖:

阅读全文 »
0%