Vim 自己寫語法高亮腳本


建立時間: 2024年5月16日 08:59
更新時間: 2024年5月23日 08:34

說明

這是一篇分享如何快速上手寫自己的語法高亮腳本,俗語說『萬事起頭難』,知道怎麼寫就成功一半,本篇將帶大家實作出簡單的語法高亮功能。

自訂副檔名

本篇將使用 .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 檔

Open .enjoy file

可以看出 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

  • Typegroup-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 的文件說明。

觀看次數: 419
syntaxvim
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

一杯咖啡的力量,勝過千言萬語的感謝。

支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!