Vimscript 基本語法高亮

2018-02-24 16:02 更新

既然已經(jīng)移除前進(jìn)路上的絆腳石,是時候開始為我們的Potion插件寫下一些有用的代碼。 我們將從一些簡單的語法高亮開始。

在你的插件的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,然后打開你的factorial.pn文件。 你也許或也許不能看到消息,取決于你是否有其他插件在該插件之后輸出消息。 如果你執(zhí)行:message,你將會看到這個文件的確已經(jīng)加載了。

注意:?每次我告訴你打開Potion文件,我是想要你在一個新的Vim窗口或進(jìn)程里打開,而不是在一個分割或tab。 打開一個新的Vim窗口導(dǎo)致Vim為此重新加載你所有的插件,而打開一個分割則不會。

代碼文件開頭和結(jié)尾的那幾行是一個慣用法,如果這個緩沖區(qū)的語法高亮已經(jīng)啟動了,那就無需重新加載。

高亮關(guān)鍵字

在本章的剩下部分,我們將忽略文件開頭和結(jié)尾的iflet防御墻。不要移除那幾行,只是眼不見為凈而已。

用下面的代碼替換掉文件中的占位符echom

syntax keyword potionKeyword to times
highlight link potionKeyword Keyword

關(guān)閉factorial.pn并重新打開它。totimes被高亮成你的配色方案中的關(guān)鍵字類型了!

這兩行展示了Vim中的基本的語法高亮。為了高亮某個語法:

  • 你首先要用syntax keyword或相關(guān)命令(我們待會會提到),定義一組語法類型。
  • 然后你要把這組類型鏈接到高亮組(highlighting groups)。 一個高亮組是你在配色方案里定義的東西,比如"函數(shù)名應(yīng)該是藍(lán)色的"。

這可以讓插件作者決定有意義的語法類型分組,然后鏈接到通用的高亮組。 這同時也讓配色方案創(chuàng)作者決定通用的程序結(jié)構(gòu),而不需要考慮單獨的語言。

除了在我們的玩具程序中用到的,Potion還有其他的關(guān)鍵字,所以讓我們修改syntax文件來一并高亮它們。

syntax keyword potionKeyword loop times to while
syntax keyword potionKeyword if elsif else
syntax keyword potionKeyword class return

highlight link potionKeyword Keyword

首先要說的是:最后一行沒有改掉。我們依然告訴Vim所有在potionKeyword中的內(nèi)容應(yīng)該作為Keyword高亮。

我們現(xiàn)在新增三行,每行都以syntax keyword potionKeyword開頭。 這意味著多次執(zhí)行這個命令不會_重置_語法類型分組 —— 而是擴增它!這使得你可以化整為零地定義分組。

怎樣定義分組取決于你:

  • 你可以僅僅一行密密麻麻地寫滿所有的內(nèi)容。
  • 你可以劃分成幾行,來滿足每行80列的規(guī)則以便于閱讀。
  • 你可以每一項都獨占一行,來使得diff的結(jié)果更加清晰。
  • 你可以跟我在這里做的一樣,把相關(guān)的項放在同一行。

高亮函數(shù)

Vim的另一個高亮組是Function。這就來加入一些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)閉并重新打開factorial.pn,你將看到內(nèi)置的Potion函數(shù)現(xiàn)在已經(jīng)高亮了。

它的工作原理就跟關(guān)鍵字高亮一樣。我們定義了新的語法類型分組并鏈接到不同的高亮組。

練習(xí)

想一想為什么文件開頭的if exists和結(jié)尾的let是有用的。如果你搞不懂,不要擔(dān)心。 我也曾就這個問題問過Tim Pope。

瀏覽:help syn-keyword。注意提到iskeyword的部分。

閱讀:help iskeyword.

閱讀:help group-name來了解一些配色方案作者常用的通用高亮組。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號