GMT语法高亮-智能提示-代码补全插件

GMT(Generic Mappint Tools)是地学界应用非常广泛的一款绘图兼数据处理的开源软件。其开发团队也是非常活跃,此软件还在不断的发展和更新中,变得越来越强大。目前已经有164个模块,而每一个模块又有很多命令参数。因为gmt是命令行软件,没有GUI界面,所以用户必须记住,或知道怎么从官方文档中查询这些参数并知道如何使用它。说起来容易,做起来难,如此大量的命令及参数,就连作者这样的深度用户都无法记住,也需要常常去访问文档查找命令和参数。这是gmt用户面临的一大难题,也是初学者望而生畏的原因。
本文将介绍作者自己开发的一款VScode (Visual Studio
Code
)
插件,不仅可以提升gmt脚本文件的颜值,而且还具有强大的代码自动补全功能和智能提示功能,再也不用担心-J后面跟啥参数这样的问题了!

GMT的工作方式

GMT其实是由一系列的命令行程序组成的,每一个模块(比如pscoast)就是一个单独的程序。而要完成一张图的绘制,直接在终端一个一个敲命令肯定不现实,效率太低。一般可取的处理方式就是将一系列命令写在一个脚本文件中:windows系统中就是大家熟悉的批处理文件,通常以.bat为后缀名;而Mac系统和Linux系统中是bash脚本文件,通常以.sh 为后缀名。这样用脚本文件的方式处理,对代码的二次利用有很大的益处。比如下面这样一段GMT的命令,

gmt begin ex22
   gmt set FONT_ANNOT_PRIMARY 10p FONT_TITLE 18p FORMAT_GEO_MAP ddd:mm:ssF
   file=`gmt which @usgs_quakes_22.txt -G`
   n=`gmt info $file -h1 -Fi -o2`
   first=`gmt info -h1 -f0T -i0 $file -C --TIME_UNIT=d -I1 -o0 --FORMAT_CLOCK_OUT=-`
   last=`gmt info -h1 -f0T -i0 $file -C --TIME_UNIT=d -I1 -o1 --FORMAT_CLOCK_OUT=-`
   me="GMT guru @@ GMTbox"
   gmt makecpt -Cred,green,blue -T0,100,300,10000 -N
   gmt coast -Rg -JK180/9i -B45g30 -B+t"World-wide earthquake activity" -Gburlywood -Slightblue -A1000 -Y2.75i
   gmt plot -C -Sci -Wfaint -hi1 -i2,1,3,4+s0.015 $file
   gmt legend -DJBC+o0/0.4i+w7i/1.7i -F+p+glightyellow neis.legend
gmt end show

可以绘制一张如下图所示的全球的地震分布的图,还是非常美观的。这个例子来源于GMT的官方例子:
example-22
.

这个例子是最新版的gmt的语法,使用了所谓的modern模式,比之前的版本在使用上精简了很多,功能也更强大了。

GMT脚本编辑器 : VScode

既然我们要用脚本文件的方式来编辑和运行GMT命令集,那么准备一个强大且美观的代码编辑器是必须的,工欲善其事必先利其器嘛!这种神器有没有呢,答案是肯定的,而且还不止一种选择,比如常用的VScode,[sublime(https://www.sublimetext.com), atom,这三款都是跨平台的,而且其用户也都非常多,都有自己的一部分铁粉。当然了,很多大神看到了可能就不服气了,说为啥不提我vim ,这个是很强大,但是本人就是不喜欢用。除此之外还有windows下的
notePad++,这个似乎没有Mac版本。当年还用win系统的时候,用过一段时间,还凑合,不过放弃它已经很久了。

工具这么多,萝卜青菜各有所爱,本人最喜欢VScode。这是个跨平台的,也就是你所有的使用习惯和软件配置以及插件,换了系统照样使用,完全不影响。VScode的用户社区越来越庞大,很多大神们也贡献了各种各样的插件,使得VScode相当的好用!虽然像C++,python, java
script这样的编程语言已经有了太多太多好用的插件,但是GMT至今还没有人贡献GMT的插件(包括代码高亮)。虽然GMT算不上编程语言,但是其命令之多参数之复杂,在某种程度上也可以算成一种脚本语言了。由于没有GMT插件,导致在使用的时候很难忍受它的颜值,那就来自己开发一个插件。下面我就来介绍这个插件:vscode-GMT

vscode-GMT

功能

代码高亮

这个是基本款,只有代码高亮功能。目前是v0.0.2版本,可以高亮显示的内容有:

  • gmt : gmt 这个词
  • gmt的所有模块名称: 比如 pscoast
  • gmt的所有模块的参数名称:比如 -J, -G
  • gmt的所有配置参数,比如 MAP_GRID_CROSS_SIZE_PRIMARY
  • gmt内置的所有颜色名称,比如 lightblue
  • gmt的所有投影参数,比如 -JM, -JX
  • 一些其他的bash类语法,比如数字,变量等

比如上面绘图的这段代码,如果没有使用vscode-GMT插件,其显示效果如下图所示的素颜代码:

有人会问了,gmt的脚本文件就是bash文件呀,vscode已经有了bash的代码高亮插件了,为啥还是没有高亮?因为vscode的bash代码高亮的插件只是针对一小部分的bash语法和关键词进行高亮的,其效果非常有限,正如上图所示。大量的gmt命令它是识别不了的,想想这也是不可能的事儿。

使用了vscode-GMT插件之后的美颜效果如下图所示:

颜色主题

这个代码高亮效果可以随着VScode的颜色主题的改变而改变,按自己喜好选择light类主题或者dark类主题。此外,vscode-GMT插件还自带了两款增强版的主题:

  • OneLight-gmt
  • OneDark-gmt

一个是亮色主题一个是暗色主题,自带的主题会对gmt的一些特有的语法进行增强高亮,已达到更好的高亮效果。这两者的高亮效果分别如下图所示。

安装

vscode-GMT的安装非常简单,跟vscode的常规插件安装方法相同,可以在线安装。因为我已经将此插件发布到了vscode
Marketplace上了,见下图。

可以直接在vscode上联网安装,在插件管理器中输入 gmt
就可以搜到我的插件了,然后点击安装即可生效,见下图。

切换专属增强型主题的方法与正常切换主题的方法一样,只需要在主题搜索栏中输入gmt就可以过滤出来
OneLight-gmtOneDark-gmt
这两个专属主题。操作流程为 ctrl+p -> 输入>color theme ->
点击第一个 -> 输入gmt 即可看到这两个主题名字,点击即可。
第二种方法更简单,在插件管理器中搜索gmt,就可以找到已经安装了的gmt插件,点击就可以看到右边窗口中logo旁边有一个
Set Color Theme
按钮,然后就会弹出这两个主题,选择点击其中一个即可生效。

vscode-GMT Pro

GMT Pro

上面介绍的这个vscode-GMT是基本款,而vscode-GMT-Pro具有更强大的功能,具体如下。

功能

语法高亮

代码高亮功能与vscode-GMT插件完全相同。

代码自动补全

目前版本的代码补全功能包括以下几项:

  • gmt模块名称:
    输入gmt然后按空格就会提示所有的gmt模块命令和相应的解释说明,可以按上下键进行选择,选中后按Tab键就可以自动补全命令。
  • gmt模块的参数:当输入 gmt
    然后选择某个模块命令之后,只要按下 -
    键就可以自动提示所有的与此模块有关的参数和解释,这个是非常实用的功能。同样可以按Tab键进行补全。
  • -J参数后面的投影方式: 当输入 -J
    后会自动弹出提示可选的投影方式,同样用上下键选择,可以看到每个投影方式的解释,然后用Tab键生效(补全)。
  • -G和-S参数后面的颜色:与-J参数的自动补全类似,只不过这两个参数后面跟的是可选的颜色名称。
  • 所有的gmt内置变量: 比如当你输入 map
    就会自动提示所有与map相关的内置变量,支持模糊输入,这对于没有准确记住内置变量名称的情况非常有帮助。大大提升了效率。

代码智能提示快捷键

上面的代码提示功能是键盘输入驱动的,比如当你输入 -
的时候回驱动参数自动补全功能。但是如果你输入 -
之后失去了鼠标焦点,或者将一个参数删除到了 -
的时候,这种情况下是不会自动驱动代码补全功能的。但是可以用快捷键进行强制启动智能提示功能,快捷键为
ctrl+D 或者Mac系统下的 cmd+D 组合键盘。

鼠标悬停提示

鼠标悬停提示功能就是当你鼠标放在一个命令或者参数上的时候,会自动提示这个命令或者参数的相关解释。此功能已经实现,但是需要花时间补充相关的解释文档,会很快跟大家见面的。注意:鼠标悬停提示只针对gmt的命令区域有效,不在其他地方出现,就如下面的动图中演示的那样。

安装

由于Pro版插件的开发耗费了大量的时间和精力,所以没有免费版。或许众筹是个思路!

需要的可以访问此链接获取安装包下载口令,SciByte公众号里面回复此口令就可以得到安装包下载地址。
下载完成后按下图的方式安装即可,也是非常容易的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356