GMT(Generic Mappint Tools)是地學界應用非常廣泛的一款繪圖兼數(shù)據(jù)處理的開源軟件。其開發(fā)團隊也是非持栊牵活躍跃巡,此軟件還在不斷的發(fā)展和更新中,變得越來越強大什猖。目前已經(jīng)有164個模塊票彪,而每一個模塊又有很多命令參數(shù)。因為gmt是命令行軟件卸伞,沒有GUI界面抹镊,所以用戶必須記住,或知道怎么從官方文檔中查詢這些參數(shù)并知道如何使用它荤傲。說起來容易垮耳,做起來難,如此大量的命令及參數(shù)遂黍,就連作者這樣的深度用戶都無法記住终佛,也需要常常去訪問文檔查找命令和參數(shù)。這是gmt用戶面臨的一大難題雾家,也是初學者望而生畏的原因铃彰。
本文將介紹作者自己開發(fā)的一款VScode (Visual Studio
Code)
插件,不僅可以提升gmt腳本文件的顏值芯咧,而且還具有強大的代碼自動補全功能和智能提示功能牙捉,再也不用擔心-J后面跟啥參數(shù)這樣的問題了!
GMT的工作方式
GMT其實是由一系列的命令行程序組成的敬飒,每一個模塊(比如pscoast
)就是一個單獨的程序邪铲。而要完成一張圖的繪制,直接在終端一個一個敲命令肯定不現(xiàn)實无拗,效率太低带到。一般可取的處理方式就是將一系列命令寫在一個腳本文件中:windows系統(tǒng)中就是大家熟悉的批處理文件,通常以.bat
為后綴名英染;而Mac系統(tǒng)和Linux系統(tǒng)中是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系統(tǒng)的時候,用過一段時間昂拂,還湊合受神,不過放棄它已經(jīng)很久了。
工具這么多格侯,蘿卜青菜各有所愛鼻听,本人最喜歡VScode。這是個跨平臺的联四,也就是你所有的使用習慣和軟件配置以及插件精算,換了系統(tǒng)照樣使用,完全不影響碎连。VScode的用戶社區(qū)越來越龐大,很多大神們也貢獻了各種各樣的插件驮履,使得VScode相當?shù)暮糜糜阏蓿‰m然像C++,python, java
script這樣的編程語言已經(jīng)有了太多太多好用的插件,但是GMT至今還沒有人貢獻GMT的插件(包括代碼高亮)玫镐。雖然GMT算不上編程語言倒戏,但是其命令之多參數(shù)之復雜,在某種程度上也可以算成一種腳本語言了恐似。由于沒有GMT插件杜跷,導致在使用的時候很難忍受它的顏值,那就來自己開發(fā)一個插件。下面我就來介紹這個插件:vscode-GMT
vscode-GMT
功能
代碼高亮
這個是基本款葛闷,只有代碼高亮功能憋槐。目前是v0.0.2版本,可以高亮顯示的內(nèi)容有:
- gmt :
gmt
這個詞 - 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插件延蟹,其顯示效果如下圖所示的素顏代碼:
有人會問了评矩,gmt的腳本文件就是bash文件呀,vscode已經(jīng)有了bash的代碼高亮插件了阱飘,為啥還是沒有高亮斥杜?因為vscode的bash代碼高亮的插件只是針對一小部分的bash語法和關鍵詞進行高亮的,其效果非常有限俯萌,正如上圖所示果录。大量的gmt命令它是識別不了的,想想這也是不可能的事兒咐熙。
使用了vscode-GMT插件之后的美顏效果如下圖所示:
顏色主題
這個代碼高亮效果可以隨著VScode的顏色主題的改變而改變弱恒,按自己喜好選擇light類主題或者dark類主題。此外棋恼,vscode-GMT插件還自帶了兩款增強版的主題:
- OneLight-gmt
- OneDark-gmt
一個是亮色主題一個是暗色主題返弹,自帶的主題會對gmt的一些特有的語法進行增強高亮,已達到更好的高亮效果爪飘。這兩者的高亮效果分別如下圖所示义起。
安裝
vscode-GMT的安裝非常簡單,跟vscode的常規(guī)插件安裝方法相同师崎,可以在線安裝默终。因為我已經(jīng)將此插件發(fā)布到了vscode
Marketplace上了,見下圖犁罩。
可以直接在vscode上聯(lián)網(wǎng)安裝齐蔽,在插件管理器中輸入 gmt
就可以搜到我的插件了,然后點擊安裝即可生效床估,見下圖含滴。
切換專屬增強型主題的方法與正常切換主題的方法一樣,只需要在主題搜索欄中輸入gmt就可以過濾出來
OneLight-gmt
和OneDark-gmt
這兩個專屬主題丐巫。操作流程為 ctrl+p -> 輸入>color theme ->
點擊第一個 -> 輸入gmt 即可看到這兩個主題名字谈况,點擊即可勺美。
第二種方法更簡單,在插件管理器中搜索gmt碑韵,就可以找到已經(jīng)安裝了的gmt插件赡茸,點擊就可以看到右邊窗口中l(wèi)ogo旁邊有一個
Set Color Theme
按鈕,然后就會彈出這兩個主題泼诱,選擇點擊其中一個即可生效坛掠。
vscode-GMT Pro
上面介紹的這個vscode-GMT是基本款,而vscode-GMT-Pro具有更強大的功能治筒,具體如下屉栓。
功能
語法高亮
代碼高亮功能與vscode-GMT插件完全相同。
代碼自動補全
目前版本的代碼補全功能包括以下幾項:
- gmt模塊名稱:
輸入gmt然后按空格就會提示所有的gmt模塊命令和相應的解釋說明耸袜,可以按上下鍵進行選擇友多,選中后按Tab鍵就可以自動補全命令。
- gmt模塊的參數(shù):當輸入
gmt
然后選擇某個模塊命令之后堤框,只要按下-
鍵就可以自動提示所有的與此模塊有關的參數(shù)和解釋域滥,這個是非常實用的功能。同樣可以按Tab鍵進行補全蜈抓。
- -J參數(shù)后面的投影方式: 當輸入
-J
后會自動彈出提示可選的投影方式启绰,同樣用上下鍵選擇,可以看到每個投影方式的解釋沟使,然后用Tab鍵生效(補全)委可。
- -G和-S參數(shù)后面的顏色:與-J參數(shù)的自動補全類似,只不過這兩個參數(shù)后面跟的是可選的顏色名稱腊嗡。
- 所有的gmt內(nèi)置變量: 比如當你輸入
map
就會自動提示所有與map相關的內(nèi)置變量着倾,支持模糊輸入,這對于沒有準確記住內(nèi)置變量名稱的情況非常有幫助燕少。大大提升了效率卡者。
代碼智能提示快捷鍵
上面的代碼提示功能是鍵盤輸入驅(qū)動的,比如當你輸入 -
的時候回驅(qū)動參數(shù)自動補全功能客们。但是如果你輸入 -
之后失去了鼠標焦點崇决,或者將一個參數(shù)刪除到了 -
的時候,這種情況下是不會自動驅(qū)動代碼補全功能的底挫。但是可以用快捷鍵進行強制啟動智能提示功能嗽桩,快捷鍵為
ctrl+D
或者Mac系統(tǒng)下的 cmd+D
組合鍵盤。
鼠標懸停提示
鼠標懸停提示功能就是當你鼠標放在一個命令或者參數(shù)上的時候凄敢,會自動提示這個命令或者參數(shù)的相關解釋。此功能已經(jīng)實現(xiàn)湿痢,但是需要花時間補充相關的解釋文檔涝缝,會很快跟大家見面的扑庞。注意:鼠標懸停提示只針對gmt的命令區(qū)域有效,不在其他地方出現(xiàn)拒逮,就如下面的動圖中演示的那樣罐氨。
安裝
由于Pro版插件的開發(fā)耗費了大量的時間和精力,所以沒有免費版滩援≌ひ或許眾籌是個思路!
需要的可以訪問此鏈接獲取安裝包下載口令玩徊,SciByte公眾號里面回復此口令就可以得到安裝包下載地址租悄。
下載完成后按下圖的方式安裝即可,也是非常容易的恩袱。