既然已經(jīng)移除前進(jìn)路上的絆腳石,是時(shí)候開(kāi)始為我們的Potion插件寫(xiě)下一些有用的代碼。 我們將從一些簡(jiǎn)單的語(yǔ)法高亮開(kāi)始。
在你的插件的repo中創(chuàng)建syntax/potion.vim
。把下面的代碼放到你的文件里:
if exists("b:current_syntax")
finish
endif
echom "Our syntax highlighting code will go here."
let b:current_syntax = "potion"
關(guān)閉Vim,然后打開(kāi)你的factorial.pn
文件。 你也許或也許不能看到消息,取決于你是否有其他插件在該插件之后輸出消息。 如果你執(zhí)行:message
,你將會(huì)看到這個(gè)文件的確已經(jīng)加載了。
注意:?每次我告訴你打開(kāi)Potion文件,我是想要你在一個(gè)新的Vim窗口或進(jìn)程里打開(kāi),而不是在一個(gè)分割或tab。 打開(kāi)一個(gè)新的Vim窗口導(dǎo)致Vim為此重新加載你所有的插件,而打開(kāi)一個(gè)分割則不會(huì)。
代碼文件開(kāi)頭和結(jié)尾的那幾行是一個(gè)慣用法,如果這個(gè)緩沖區(qū)的語(yǔ)法高亮已經(jīng)啟動(dòng)了,那就無(wú)需重新加載。
在本章的剩下部分,我們將忽略文件開(kāi)頭和結(jié)尾的if
和let
防御墻。不要移除那幾行,只是眼不見(jiàn)為凈而已。
用下面的代碼替換掉文件中的占位符echom
:
syntax keyword potionKeyword to times
highlight link potionKeyword Keyword
關(guān)閉factorial.pn
并重新打開(kāi)它。to
和times
被高亮成你的配色方案中的關(guān)鍵字類型了!
這兩行展示了Vim中的基本的語(yǔ)法高亮。為了高亮某個(gè)語(yǔ)法:
syntax keyword
或相關(guān)命令(我們待會(huì)會(huì)提到),定義一組語(yǔ)法類型。這可以讓插件作者決定有意義的語(yǔ)法類型分組,然后鏈接到通用的高亮組。 這同時(shí)也讓配色方案創(chuàng)作者決定通用的程序結(jié)構(gòu),而不需要考慮單獨(dú)的語(yǔ)言。
除了在我們的玩具程序中用到的,Potion還有其他的關(guān)鍵字,所以讓我們修改syntax文件來(lái)一并高亮它們。
syntax keyword potionKeyword loop times to while
syntax keyword potionKeyword if elsif else
syntax keyword potionKeyword class return
highlight link potionKeyword Keyword
首先要說(shuō)的是:最后一行沒(méi)有改掉。我們依然告訴Vim所有在potionKeyword
中的內(nèi)容應(yīng)該作為Keyword
高亮。
我們現(xiàn)在新增三行,每行都以syntax keyword potionKeyword
開(kāi)頭。 這意味著多次執(zhí)行這個(gè)命令不會(huì)_重置_語(yǔ)法類型分組 —— 而是擴(kuò)增它!這使得你可以化整為零地定義分組。
怎樣定義分組取決于你:
Vim的另一個(gè)高亮組是Function
。這就來(lái)加入一些Potion的內(nèi)置函數(shù)到我們的高亮文件。 把你的syntax文件修改成這樣:
syntax keyword potionKeyword loop times to while
syntax keyword potionKeyword if elsif else
syntax keyword potionKeyword class return
syntax keyword potionFunction print join string
highlight link potionKeyword Keyword
highlight link potionFunction Function
關(guān)閉并重新打開(kāi)factorial.pn
,你將看到內(nèi)置的Potion函數(shù)現(xiàn)在已經(jīng)高亮了。
它的工作原理就跟關(guān)鍵字高亮一樣。我們定義了新的語(yǔ)法類型分組并鏈接到不同的高亮組。
想一想為什么文件開(kāi)頭的if exists
和結(jié)尾的let
是有用的。如果你搞不懂,不要擔(dān)心。 我也曾就這個(gè)問(wèn)題問(wèn)過(guò)Tim Pope。
瀏覽:help syn-keyword
。注意提到iskeyword
的部分。
閱讀:help iskeyword
.
閱讀:help group-name
來(lái)了解一些配色方案作者常用的通用高亮組。
更多建議: