GMT(Generic Mappint Tools)是地學(xué)界應(yīng)用非常廣泛的一款繪圖兼數(shù)據(jù)處理的開源軟件。其開發(fā)團(tuán)隊(duì)也是非常活躍,此軟件還在不斷的發(fā)展和更新中,變得越來越強(qiáng)大。目前已經(jīng)有164個(gè)模塊,而每一個(gè)模塊又有很多命令參數(shù)。因?yàn)間mt是命令行軟件,沒有GUI界面,所以用戶必須記住,或知道怎么從官方文檔中查詢這些參數(shù)并知道如何使用它。說起來容易,做起來難,如此大量的命令及參數(shù),就連作者這樣的深度用戶都無法記住,也需要常常去訪問文檔查找命令和參數(shù)。這是gmt用戶面臨的一大難題,也是初學(xué)者望而生畏的原因。
本文將介紹作者自己開發(fā)的一款VScode (Visual Studio
Code)
插件,不僅可以提升gmt腳本文件的顏值,而且還具有強(qiáng)大的代碼自動(dòng)補(bǔ)全功能和智能提示功能,再也不用擔(dān)心-J后面跟啥參數(shù)這樣的問題了!
GMT的工作方式
GMT其實(shí)是由一系列的命令行程序組成的,每一個(gè)模塊(比如pscoast
)就是一個(gè)單獨(dú)的程序。而要完成一張圖的繪制,直接在終端一個(gè)一個(gè)敲命令肯定不現(xiàn)實(shí),效率太低。一般可取的處理方式就是將一系列命令寫在一個(gè)腳本文件中:windows系統(tǒng)中就是大家熟悉的批處理文件,通常以.bat
為后綴名;而Mac系統(tǒng)和Linux系統(tǒng)中是bash腳本文件,通常以.sh
為后綴名。這樣用腳本文件的方式處理,對(duì)代碼的二次利用有很大的益處。比如下面這樣一段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
可以繪制一張如下圖所示的全球的地震分布的圖,還是非常美觀的。這個(gè)例子來源于GMT的官方例子:
example-22
.
這個(gè)例子是最新版的gmt的語法,使用了所謂的modern模式,比之前的版本在使用上精簡(jiǎn)了很多,功能也更強(qiáng)大了。
GMT腳本編輯器 : VScode
既然我們要用腳本文件的方式來編輯和運(yùn)行GMT命令集,那么準(zhǔn)備一個(gè)強(qiáng)大且美觀的代碼編輯器是必須的,工欲善其事必先利其器嘛!這種神器有沒有呢,答案是肯定的,而且還不止一種選擇,比如常用的VScode,[sublime(https://www.sublimetext.com), atom,這三款都是跨平臺(tái)的,而且其用戶也都非常多,都有自己的一部分鐵粉。當(dāng)然了,很多大神看到了可能就不服氣了,說為啥不提我vim ,這個(gè)是很強(qiáng)大,但是本人就是不喜歡用。除此之外還有windows下的
notePad++,這個(gè)似乎沒有Mac版本。當(dāng)年還用win系統(tǒng)的時(shí)候,用過一段時(shí)間,還湊合,不過放棄它已經(jīng)很久了。
工具這么多,蘿卜青菜各有所愛,本人最喜歡VScode。這是個(gè)跨平臺(tái)的,也就是你所有的使用習(xí)慣和軟件配置以及插件,換了系統(tǒng)照樣使用,完全不影響。VScode的用戶社區(qū)越來越龐大,很多大神們也貢獻(xiàn)了各種各樣的插件,使得VScode相當(dāng)?shù)暮糜茫‰m然像C++,python, java
script這樣的編程語言已經(jīng)有了太多太多好用的插件,但是GMT至今還沒有人貢獻(xiàn)GMT的插件(包括代碼高亮)。雖然GMT算不上編程語言,但是其命令之多參數(shù)之復(fù)雜,在某種程度上也可以算成一種腳本語言了。由于沒有GMT插件,導(dǎo)致在使用的時(shí)候很難忍受它的顏值,那就來自己開發(fā)一個(gè)插件。下面我就來介紹這個(gè)插件:vscode-GMT
vscode-GMT
功能
代碼高亮
這個(gè)是基本款,只有代碼高亮功能。目前是v0.0.2版本,可以高亮顯示的內(nèi)容有:
- gmt :
gmt
這個(gè)詞 - gmt的所有模塊名稱: 比如
pscoast
- gmt的所有模塊的參數(shù)名稱:比如
-J, -G
等 - gmt的所有配置參數(shù),比如
MAP_GRID_CROSS_SIZE_PRIMARY
- gmt內(nèi)置的所有顏色名稱,比如
lightblue
- gmt的所有投影參數(shù),比如
-JM, -JX
- 一些其他的bash類語法,比如數(shù)字,變量等
比如上面繪圖的這段代碼,如果沒有使用vscode-GMT插件,其顯示效果如下圖所示的素顏代碼:
有人會(huì)問了,gmt的腳本文件就是bash文件呀,vscode已經(jīng)有了bash的代碼高亮插件了,為啥還是沒有高亮?因?yàn)関scode的bash代碼高亮的插件只是針對(duì)一小部分的bash語法和關(guān)鍵詞進(jìn)行高亮的,其效果非常有限,正如上圖所示。大量的gmt命令它是識(shí)別不了的,想想這也是不可能的事兒。
使用了vscode-GMT插件之后的美顏效果如下圖所示:
顏色主題
這個(gè)代碼高亮效果可以隨著VScode的顏色主題的改變而改變,按自己喜好選擇light類主題或者dark類主題。此外,vscode-GMT插件還自帶了兩款增強(qiáng)版的主題:
- OneLight-gmt
- OneDark-gmt
一個(gè)是亮色主題一個(gè)是暗色主題,自帶的主題會(huì)對(duì)gmt的一些特有的語法進(jìn)行增強(qiáng)高亮,已達(dá)到更好的高亮效果。這兩者的高亮效果分別如下圖所示。
安裝
vscode-GMT的安裝非常簡(jiǎn)單,跟vscode的常規(guī)插件安裝方法相同,可以在線安裝。因?yàn)槲乙呀?jīng)將此插件發(fā)布到了vscode
Marketplace上了,見下圖。
可以直接在vscode上聯(lián)網(wǎng)安裝,在插件管理器中輸入 gmt
就可以搜到我的插件了,然后點(diǎn)擊安裝即可生效,見下圖。
切換專屬增強(qiáng)型主題的方法與正常切換主題的方法一樣,只需要在主題搜索欄中輸入gmt就可以過濾出來
OneLight-gmt
和OneDark-gmt
這兩個(gè)專屬主題。操作流程為 ctrl+p -> 輸入>color theme ->
點(diǎn)擊第一個(gè) -> 輸入gmt 即可看到這兩個(gè)主題名字,點(diǎn)擊即可。
第二種方法更簡(jiǎn)單,在插件管理器中搜索gmt,就可以找到已經(jīng)安裝了的gmt插件,點(diǎn)擊就可以看到右邊窗口中l(wèi)ogo旁邊有一個(gè)
Set Color Theme
按鈕,然后就會(huì)彈出這兩個(gè)主題,選擇點(diǎn)擊其中一個(gè)即可生效。
vscode-GMT Pro
上面介紹的這個(gè)vscode-GMT是基本款,而vscode-GMT-Pro具有更強(qiáng)大的功能,具體如下。
功能
語法高亮
代碼高亮功能與vscode-GMT插件完全相同。
代碼自動(dòng)補(bǔ)全
目前版本的代碼補(bǔ)全功能包括以下幾項(xiàng):
- gmt模塊名稱:
輸入gmt然后按空格就會(huì)提示所有的gmt模塊命令和相應(yīng)的解釋說明,可以按上下鍵進(jìn)行選擇,選中后按Tab鍵就可以自動(dòng)補(bǔ)全命令。
- gmt模塊的參數(shù):當(dāng)輸入
gmt
然后選擇某個(gè)模塊命令之后,只要按下-
鍵就可以自動(dòng)提示所有的與此模塊有關(guān)的參數(shù)和解釋,這個(gè)是非常實(shí)用的功能。同樣可以按Tab鍵進(jìn)行補(bǔ)全。
- -J參數(shù)后面的投影方式: 當(dāng)輸入
-J
后會(huì)自動(dòng)彈出提示可選的投影方式,同樣用上下鍵選擇,可以看到每個(gè)投影方式的解釋,然后用Tab鍵生效(補(bǔ)全)。
- -G和-S參數(shù)后面的顏色:與-J參數(shù)的自動(dòng)補(bǔ)全類似,只不過這兩個(gè)參數(shù)后面跟的是可選的顏色名稱。
- 所有的gmt內(nèi)置變量: 比如當(dāng)你輸入
map
就會(huì)自動(dòng)提示所有與map相關(guān)的內(nèi)置變量,支持模糊輸入,這對(duì)于沒有準(zhǔn)確記住內(nèi)置變量名稱的情況非常有幫助。大大提升了效率。
代碼智能提示快捷鍵
上面的代碼提示功能是鍵盤輸入驅(qū)動(dòng)的,比如當(dāng)你輸入 -
的時(shí)候回驅(qū)動(dòng)參數(shù)自動(dòng)補(bǔ)全功能。但是如果你輸入 -
之后失去了鼠標(biāo)焦點(diǎn),或者將一個(gè)參數(shù)刪除到了 -
的時(shí)候,這種情況下是不會(huì)自動(dòng)驅(qū)動(dòng)代碼補(bǔ)全功能的。但是可以用快捷鍵進(jìn)行強(qiáng)制啟動(dòng)智能提示功能,快捷鍵為
ctrl+D
或者M(jìn)ac系統(tǒng)下的 cmd+D
組合鍵盤。
鼠標(biāo)懸停提示
鼠標(biāo)懸停提示功能就是當(dāng)你鼠標(biāo)放在一個(gè)命令或者參數(shù)上的時(shí)候,會(huì)自動(dòng)提示這個(gè)命令或者參數(shù)的相關(guān)解釋。此功能已經(jīng)實(shí)現(xiàn),但是需要花時(shí)間補(bǔ)充相關(guān)的解釋文檔,會(huì)很快跟大家見面的。注意:鼠標(biāo)懸停提示只針對(duì)gmt的命令區(qū)域有效,不在其他地方出現(xiàn),就如下面的動(dòng)圖中演示的那樣。
安裝
由于Pro版插件的開發(fā)耗費(fèi)了大量的時(shí)間和精力,所以沒有免費(fèi)版。或許眾籌是個(gè)思路!
需要的可以訪問此鏈接獲取安裝包下載口令,SciByte公眾號(hào)里面回復(fù)此口令就可以得到安裝包下載地址。
下載完成后按下圖的方式安裝即可,也是非常容易的。