Vim 自己寫語法高亮腳本
分類
說明
這是一篇分享如何快速上手寫自己的語法高亮腳本,俗語說『萬事起頭難』,知道怎麼寫就成功一半,本篇將帶大家實作出簡單的語法高亮功能。
自訂副檔名
本篇將使用 .enjoy
副檔名做為範例,所以我會有一個 hello.enjoy
檔案如下
hello.enjoy
Hello Enjoy.
enjoy everyday.
建立語法腳本
我們需要建立一個專門給 .enjoy
用的語法腳本,當 Vim 打開 .enjoy
時就會自動執行該腳本。以此範例,我們需要建立 enjoy.vim
並將腳本存放在 $HOME/.vim/syntax
目錄。
$HOME/.vim/syntax/enjoy.vim
syntax case ignore
syntax keyword Identifier enjoy
註: $HOME/.vim/syntax/enjoy.vim
的 $HOME
是家目錄的變數,.vim
是 Unix 系統的 vim 設定專案的目錄,syntax
是處理語法的目錄。
建立偵測檔案類型腳本
vim 會檢查 runtimepath
的 ftdetect 目錄,你可以在 ftdetect 目錄寫一些定義檔案類型的腳本,關於 runtimepath
你可以參考底下相關文章。
vim 不知道 .enjoy
副檔名的檔案類型為 enjoy,所以必須寫腳本讓它自動將 *.enjoy
設定檔案類型為 enjoy。
在 $HOME/.vim/ftdetect
目錄建立 enjoy.vim
。
$HOME/.vim/ftdetect/enjoy.vim
au BufRead,BufNewFile *.enjoy set filetype=enjoy
打開 .enjoy 檔
可以看出 enjoy 不區分大小寫,都變成關鍵字變數名,呈現藍色。
後面的內容,我將簡單介紹語法要如何使用。
設定語法
定義大小寫敏感
查看文件 :syn-case
:sy[ntax] case [match | ignore]
要求其後的 :syntax
命令在本設定為 match
時必須匹配大小寫,本設定為 ignore
時則可以忽略大小寫。請注意,它不影響先前的項目,而只影響其後直到下一個 :syntax case
命令為止的所有項目。
:sy[ntax] case
顯示 “syntax case match” 或 “syntax case ignore” 之一。
定義關鍵字
:sy[ntax] keyword {group-name} [{options}] {keyword} .. [{options}]
查看文件 :syn-keyword
定義一系列關鍵字。
{group-name}
是語法組名,例如 “Comment”,參考 語法群組名。
[{options}]
參考 語法參數。
{keyword} ..
是關鍵字列表,這些關鍵字成為該群組的成員。
{options}
可以在該行的任何位置給出。它們應用於所有的關鍵字,包括選項之前的關鍵字。以下例子完全相同:
:syntax keyword Type contained int long char
:syntax keyword Type int long contained char
:syntax keyword Type int long char contained
其中 contained
是 {options}
。
範例
:syntax keyword Type int long char
Type
是group-name
。int long char
是{keyword} ..
。
語法群組名
查看文件 :group-name
以下是部分建議的群組名:
Type | ? | 描述 |
---|---|---|
*Comment | v | 任何註解 |
Type | ? | 描述 |
---|---|---|
*Identifier | v | 任何變數名 |
Function | v | 函數名 (也包括: 類別的方法名) |
詳細的建議的群組名請參考文件 :group-name
。
*
標記的名字是主群組,其它是子群組。對主群組而言,syntax.vim
文件包含預設的高亮設定。 子群組則連結到主群組。
v
看不懂是什麼意思,照著官方文件寫上去的。
語法參數
查看說明 :syn-arguments
定義語法項目的 :syntax
命令接受多個參數。
contained
查看說明 :syn-contained
如果給予 contained
參數,本項目在頂層不會被辨識。只有包含在另外一個項目才可以,而且那個項目必須給予 contains 參數且其中包含本項目。
範例
:syntax keyword Todo TODO contained
:syntax match Comment "//.*" contains=Todo
結論
透過本篇簡單地示範 .enjoy
語法高亮後,若有興趣想了解更多,建議可以參考 vim 的文件說明。
相關文章:
一杯咖啡的力量,勝過千言萬語的感謝。
支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!