GMT語法高亮-智能提示-代碼補(bǔ)全插件

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-gmtOneDark-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

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ù)此口令就可以得到安裝包下載地址。
下載完成后按下圖的方式安裝即可,也是非常容易的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評(píng)論 6 546
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,814評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評(píng)論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評(píng)論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,779評(píng)論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,109評(píng)論 1 330
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評(píng)論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,287評(píng)論 0 291
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,799評(píng)論 1 338
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,515評(píng)論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,750評(píng)論 1 375
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,933評(píng)論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評(píng)論 1 296
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,492評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,703評(píng)論 2 380