Usr_44

Nvim 的 :help 頁面,從 原始碼 使用 tree-sitter-vimdoc 解析器 產生


VIM 使用者手冊 - 作者:Bram Moolenaar
您自己的語法高亮
Vim 內建了數百種不同檔案類型的語法高亮。如果您正在編輯的檔案類型未包含在其中,請閱讀本章,了解如何為此類檔案啟用高亮顯示。另請參閱參考手冊中的 :syn-define
44.1 基本語法指令 44.2 關鍵字 44.3 匹配 44.4 區域 44.5 巢狀項目 44.6 後續群組 44.7 其他參數 44.8 叢集 44.9 包含其他語法檔案 44.10 同步 44.11 安裝語法檔案 44.12 可移植的語法檔案佈局
下一章:usr_45.txt 選擇您的語言 上一章:usr_43.txt 使用檔案類型 目錄:usr_toc.txt

基本語法指令

使用現有的語法檔案作為起點,將節省您很多時間。嘗試在 $VIMRUNTIME/syntax 中尋找與您要處理的語言相似的語法檔案。這些檔案也會向您展示語法檔案的正常佈局。要理解它,您需要閱讀以下內容。
讓我們從基本參數開始。在我們開始定義任何新的語法之前,我們需要清除任何舊的定義
:syntax clear
這在最終的語法檔案中不是必需的,但在實驗時非常有用。
本章還有更多簡化說明。如果您正在編寫供他人使用的語法檔案,請完整閱讀到最後,以了解詳細資訊。

列出已定義的項目

要檢查目前定義了哪些語法項目,請使用此指令
:syntax
您可以使用它來檢查實際定義了哪些項目。當您正在實驗新的語法檔案時,這非常有用。它還顯示每個項目使用的顏色,這有助於找出每個項目是什麼。要列出特定語法群組中的項目,請使用
:syntax list {group-name}
這也可以用來列出叢集(在 44.8 中說明)。只需在名稱中包含 @ 即可。

匹配大小寫

有些語言不區分大小寫,例如 Pascal。其他語言(例如 C)則區分大小寫。您需要使用以下指令告知您屬於哪種類型
:syntax case match
:syntax case ignore
「match」參數表示 Vim 將匹配語法元素的大小寫。因此,「int」與「Int」和「INT」不同。如果使用「ignore」參數,則以下內容是等效的:「Procedure」、「PROCEDURE」和「procedure」。":syntax case" 指令可以出現在語法檔案中的任何位置,並影響隨後的語法定義。在大多數情況下,您的語法檔案中只有一個 ":syntax case" 指令;但是,如果您使用包含區分大小寫和不區分大小寫元素的非標準語言,則可以在整個檔案中散佈 ":syntax case" 指令。

44.2 關鍵字

最基本的語法元素是關鍵字。要定義關鍵字,請使用以下形式
:syntax keyword {group} {keyword} ...
{group} 是語法群組的名稱。您可以使用 ":highlight" 指令為 {group} 指派顏色。{keyword} 參數是實際的關鍵字。以下是一些範例
:syntax keyword xType int long char
:syntax keyword xStatement if then else endif
此範例使用群組名稱「xType」和「xStatement」。按照慣例,每個群組名稱都以正在定義的語言的檔案類型作為前綴。此範例定義 x 語言(名稱不有趣的 eXample 語言)的語法。在「csh」指令碼的語法檔案中,將使用名稱「cshType」。因此,前綴等於 「filetype」 的值。這些指令會使單字「int」、「long」和「char」以一種方式高亮顯示,而單字「if」、「then」、「else」和「endif」則以另一種方式高亮顯示。現在您需要將 x 群組名稱連接到標準 Vim 名稱。您可以使用以下指令執行此操作
:highlight link xType Type
:highlight link xStatement Statement
這會告訴 Vim 將「xType」像「Type」一樣高亮顯示,並將「xStatement」像「Statement」一樣高亮顯示。請參閱 群組名稱 以了解標準名稱。

不尋常的關鍵字

關鍵字中使用的字元必須在 「iskeyword」 選項中。如果您使用其他字元,則永遠不會比對到該單字。Vim 不會為此顯示警告訊息。x 語言在關鍵字中使用「-」字元。以下是如何完成的
:setlocal iskeyword+=-
:syntax keyword xStatement when-not
":setlocal" 指令僅用於變更目前緩衝區的 「iskeyword」。它仍然會變更「w」和「*」等指令的行為。如果不需要這樣做,請不要定義關鍵字,而是使用匹配項(在下一節中說明)。
x 語言允許縮寫。例如,「next」可以縮寫為「n」、「ne」或「nex」。您可以使用此指令定義它們
:syntax keyword xStatement n[ext]
這不會比對到「nextone」,關鍵字永遠只比對整個單字。

44.3 匹配

考慮定義一些更複雜的東西。您想要比對普通的識別碼。若要執行此操作,您可以定義匹配語法項目。此項目會比對任何僅由小寫字母組成的單字
:syntax match xIdentifier /\<\l\+\>/
注意:關鍵字會覆蓋任何其他語法項目。因此,關鍵字「if」、「then」等將是關鍵字,就像使用上面的 ":syntax keyword" 指令定義的一樣,即使它們也符合 xIdentifier 的模式。
結尾部分是模式,就像用於搜尋一樣。// 用於括住模式(就像在 ":substitute" 指令中一樣)。您可以使用任何其他字元,例如加號或引號。
現在定義註解的匹配項。在 x 語言中,它是從 # 到行尾的任何內容
:syntax match xComment /#.*/
由於您可以使用任何搜尋模式,因此您可以使用匹配項目來高亮顯示非常複雜的事物。請參閱 pattern 以取得搜尋模式的相關說明。

44.4 區域

在範例 x 語言中,字串以雙引號 (") 括住。要高亮顯示字串,您可以定義一個區域。您需要一個區域開始(雙引號)和一個區域結束(雙引號)。定義如下
:syntax region xString start=/"/ end=/"/
「start」和「end」指令定義用於尋找區域開頭和結尾的模式。但是,如果字串看起來像這樣呢?
「字串中帶有雙引號 (\")」
這會產生一個問題:字串中間的雙引號將結束該區域。您需要告訴 Vim 跳過字串中任何逸出的雙引號。使用 skip 關鍵字執行此操作
:syntax region xString start=/"/ skip=/\\"/ end=/"/
雙反斜線會比對單個反斜線,因為反斜線是搜尋模式中的特殊字元。
何時使用區域而不是匹配項?主要差異在於匹配項目是單個模式,必須整體比對。一旦「start」模式比對,區域就會開始。是否找到「end」模式並不重要。因此,當項目取決於「end」模式來比對時,您無法使用區域。否則,區域通常更容易定義。而且,使用巢狀項目也更容易,如下一節所述。

44.5 巢狀項目

看看這個註解
%取得輸入 TODO:跳過空白
您想要用大黃色字母高亮顯示 TODO,即使它位於以藍色高亮顯示的註解中。若要讓 Vim 知道這一點,請定義以下語法群組
:syntax keyword xTodo TODO contained
:syntax match xComment /%.*/ contains=xTodo
在第一行中,「contained」參數告訴 Vim 這個關鍵字只能存在於另一個語法項目內。下一行具有「contains=xTodo」。這表示 xTodo 語法元素位於其中。結果是整行註解會與「xComment」比對,並變為藍色。其中的單字 TODO 會與 xTodo 比對,並高亮顯示為黃色(已為 xTodo 設定高亮顯示)。

遞迴巢狀

x 語言在花括號中定義程式碼區塊。而程式碼區塊可能包含其他程式碼區塊。可以使用這種方式定義
:syntax region xBlock start=/{/ end=/}/ contains=xBlock
假設您有這個文字
while i < b {
if a {
b = c;
}
}
首先,xBlock 從第一行中的 { 開始。在第二行中,找到另一個 {。由於我們在 xBlock 項目內,並且它包含自身,因此此處將開始巢狀 xBlock 項目。因此,「b = c」行位於第二層 xBlock 區域內。然後,在下一行中找到 },它與區域的結束模式比對。這會結束巢狀 xBlock。因為 } 包含在巢狀區域中,所以它會對第一個 xBlock 區域隱藏。然後,在最後一個 } 處,第一個 xBlock 區域結束。

保留結尾

考慮以下兩個語法項目
:syntax region xComment start=/%/ end=/$/ contained
:syntax region xPreProc start=/#/ end=/$/ contains=xComment
您將註解定義為從 % 到行尾的任何內容。前置處理器指令是從 # 到行尾的任何內容。由於您可以在前置處理器行上加上註解,因此前置處理器定義包含「contains=xComment」參數。現在看看此文字會發生什麼事
#define X = Y % 註解文字
int foo = 1;
您看到的是,第二行也會以 xPreProc 高亮顯示。前置處理器指令應該在行尾結束。這就是為什麼您使用「end=/$/」。那麼哪裡出錯了?問題在於包含的註解。註解以 % 開頭,並在行尾結束。註解結束後,前置處理器語法會繼續。這是因為已經看到行尾,因此也包含下一行。若要避免此問題,並避免包含的語法項目吃掉需要的行尾,請使用「keepend」參數。這會處理雙行尾比對
:syntax region xComment start=/%/ end=/$/ contained
:syntax region xPreProc start=/#/ end=/$/ contains=xComment keepend

包含多個項目

您可以使用 contains 參數來指定可以包含所有內容。例如
:syntax region xList start=/\[/ end=/\]/ contains=ALL
所有語法項目都將包含在此項目中。它也包含自身,但不在同一位置(這會導致無止盡的迴圈)。您可以指定不包含某些群組。因此,包含所有群組,但列出的群組除外
:syntax region xList start=/\[/ end=/\]/ contains=ALLBUT,xString
使用「TOP」項目,您可以包含所有沒有「contained」引數的項目。「CONTAINED」用於僅包含具有「contained」引數的項目。詳情請參閱 :syn-contains

44.6 後續群組

x 語言具有以下形式的語句
if (condition) then
您想要以不同的方式突出顯示這三個項目。但是「(condition)」和「then」也可能出現在其他地方,並獲得不同的突出顯示。以下說明如何做到這一點
:syntax match xIf /if/ nextgroup=xIfCondition skipwhite
:syntax match xIfCondition /([^)]*)/ contained nextgroup=xThen skipwhite
:syntax match xThen /then/ contained
「nextgroup」引數指定下一個可以出現的項目。這不是必需的。如果沒有找到指定的項目,則不會發生任何事。例如,在此文字中
if not (condition) then
「if」會被 xIf 匹配。「not」不匹配指定的 nextgroup xIfCondition,因此只會突出顯示「if」。
「skipwhite」引數告訴 Vim,項目之間可能會出現空白字元(空格和 Tab)。類似的引數還有「skipnl」,它允許項目之間出現換行符;以及「skipempty」,它允許空行。請注意,「skipnl」不會跳過空行,換行符之後必須有東西匹配。

44.7 其他引數

MATCHGROUP

當您定義一個區域時,整個區域會根據指定的群組名稱突出顯示。例如,要使用群組 xInside 突出顯示括號 () 內的文字,請使用以下命令
:syntax region xInside start=/(/ end=/)/
假設您想要以不同的方式突出顯示括號。您可以使用許多複雜的區域語句來做到這一點,或者您可以使用「matchgroup」引數。這會告訴 Vim 使用不同的突出顯示群組(在此例中為 xParen 群組)來突出顯示區域的開始和結束
:syntax region xInside matchgroup=xParen start=/(/ end=/)/
「matchgroup」引數會套用到它之後的開始或結束匹配。在先前的範例中,開始和結束都使用 xParen 突出顯示。要使用 xParenEnd 突出顯示結束
:syntax region xInside matchgroup=xParen start=/(/
        \ matchgroup=xParenEnd end=/)/
使用「matchgroup」的一個副作用是,包含的項目不會在區域的開始或結束處匹配。「transparent」的範例使用了這一點。

TRANSPARENT

在 C 語言檔案中,您想要以不同的方式突出顯示「while」之後的 () 文字,而不是「for」之後的 () 文字。在這兩種情況下,都可以有巢狀的 () 項目,它們應該以相同的方式突出顯示。您必須確保 () 突出顯示會在匹配的 ) 處停止。以下是一種執行此操作的方式
:syntax region cWhile matchgroup=cWhile start=/while\s*(/ end=/)/
        \ contains=cCondNest
:syntax region cFor matchgroup=cFor start=/for\s*(/ end=/)/
        \ contains=cCondNest
:syntax region cCondNest start=/(/ end=/)/ contained transparent
現在您可以為 cWhile 和 cFor 提供不同的突出顯示。cCondNest 項目可以出現在其中任何一個中,但會接管它所包含項目的突出顯示。「transparent」引數會導致此情況發生。請注意,「matchgroup」引數具有與項目本身相同的群組。那為什麼還要定義它?好吧,使用 matchgroup 的副作用是,包含的項目不會在與開始項目匹配時被找到。這避免了 cCondNest 群組匹配「while」或「for」之後的 (。如果發生這種情況,它將跨越整個文字直到匹配的 ),並且該區域會在它之後繼續。現在 cCondNest 只會在與開始模式匹配之後,也就是第一個 ( 之後匹配。

OFFSETS

假設您想要為「if」之後的 ( 和 ) 之間的文字定義一個區域。但是您不想要包含「if」或 ( 和 )。您可以透過指定模式的偏移來做到這一點。範例
:syntax region xCond start=/if\s*(/ms=e+1 end=/)/me=s-1
開始模式的偏移為「ms=e+1」。「ms」代表「Match Start」。這會定義匹配開始的偏移。通常,匹配從模式匹配的位置開始。「e+1」表示匹配現在從模式匹配的結尾開始,然後再往後一個字元。結束模式的偏移為「me=s-1」。「me」代表「Match End」。「s-1」表示模式匹配的開始,然後往前一個字元。結果是在此文字中
if (foo == bar)
只有文字「foo == bar」會以 xCond 突出顯示。
關於偏移的更多資訊請參閱::syn-pattern-offset

ONELINE

「oneline」引數表示該區域不會跨越行邊界。例如
:syntax region xIfThen start=/if/ end=/then/ oneline
這會定義一個從「if」開始,到「then」結束的區域。但是,如果「if」之後沒有「then」,則該區域不會匹配。
注意: 使用「oneline」時,如果結束模式沒有在同一行中匹配,則該區域不會開始。在沒有「oneline」的情況下,Vim 不會檢查結束模式是否匹配。即使結束模式沒有在檔案的其餘部分中匹配,該區域也會開始。

連續行和避免它們

現在事情變得有點複雜。讓我們定義一個前處理器行。這以第一欄中的 # 開頭,並持續到行尾。以 \ 結尾的行會使下一行成為連續行。您處理這個問題的方式是允許語法項目包含一個連續模式
:syntax region xPreProc start=/^#/ end=/$/ contains=xLineContinue
:syntax match xLineContinue "\\$" contained
在這種情況下,儘管 xPreProc 通常匹配單行,但其中包含的群組(即 xLineContinue)可讓它持續超過一行。例如,它會匹配這兩行
#define SPAM spam spam spam \
培根和垃圾郵件
在這種情況下,這是您想要的。如果這不是您想要的,您可以呼叫該區域僅位於單行上,方法是將「excludenl」新增到包含的模式。例如,您想要突出顯示 xPreProc 中的「end」,但只能在行尾。為了避免讓 xPreProc 像 xLineContinue 一樣繼續到下一行,請像這樣使用「excludenl」
:syntax region xPreProc start=/^#/ end=/$/
        \ contains=xLineContinue,xPreProcEnd
:syntax match xPreProcEnd excludenl /end$/ contained
:syntax match xLineContinue "\\$" contained
「excludenl」必須放在模式之前。由於「xLineContinue」沒有「excludenl」,因此與它的匹配會像之前一樣將 xPreProc 延伸到下一行。

44.8 叢集

當您開始編寫語法檔案時,您會注意到的一件事是,您最終會產生很多語法群組。Vim 可讓您定義稱為叢集的語法群組集合。假設您有一種語言包含 for 迴圈、if 語句、while 迴圈和函數。它們中的每一個都包含相同的語法元素:數字和識別碼。您可以這樣定義它們
:syntax match xFor /^for.*/ contains=xNumber,xIdent
:syntax match xIf /^if.*/ contains=xNumber,xIdent
:syntax match xWhile /^while.*/ contains=xNumber,xIdent
您必須每次都重複相同的「contains=」。如果您想要新增另一個包含的項目,則必須新增三次。語法叢集透過讓一個叢集代表數個語法群組來簡化這些定義。要為這三個群組包含的兩個項目定義一個叢集,請使用以下命令
:syntax cluster xState contains=xNumber,xIdent
叢集在其他語法項目中使用的就像任何語法群組一樣。它們的名稱以 @ 開頭。因此,您可以像這樣定義這三個群組
:syntax match xFor /^for.*/ contains=@xState
:syntax match xIf /^if.*/ contains=@xState
:syntax match xWhile /^while.*/ contains=@xState
您可以使用「add」引數將新的群組名稱新增到此叢集
:syntax cluster xState add=xString
您也可以從此清單中移除語法群組
:syntax cluster xState remove=xNumber

44.9 包含另一個語法檔案

C++ 語言語法是 C 語言的超集合。由於您不想要編寫兩個語法檔案,您可以讓 C++ 語法檔案透過使用以下命令讀取 C 的語法檔案
:runtime! syntax/c.vim
「:runtime!」命令會搜尋 'runtimepath' 中的所有「syntax/c.vim」檔案。這會使 C++ 語法的 C 部分定義為與 C 檔案相同。如果您已取代 c.vim 語法檔案,或使用額外檔案新增項目,這些也會被載入。載入 C 語法項目之後,可以定義特定的 C++ 項目。例如,新增 C 中未使用的關鍵字
:syntax keyword cppStatement        new delete this friend using
它的運作方式就像任何其他語法檔案一樣。
現在考慮 Perl 語言。Perl 指令碼由兩個不同的部分組成:POD 格式的文件區段,以及以 Perl 本身撰寫的程式。POD 區段以「=head」開頭,以「=cut」結尾。您想要在一個檔案中定義 POD 語法,並從 Perl 語法檔案中使用它。「:syntax include」命令會讀取語法檔案,並將其定義的元素儲存在語法叢集中。對於 Perl,語句如下
:syntax include @Pod <sfile>:p:h/pod.vim
:syntax region perlPOD start=/^=head/ end=/^=cut/ contains=@Pod
當在 Perl 檔案中找到「=head」時,perlPOD 區域會開始。在此區域中,包含 @Pod 叢集。在 pod.vim 語法檔案中定義為頂層項目的所有項目都將在此處匹配。當找到「=cut」時,該區域結束,我們返回到 Perl 檔案中定義的項目。「:syntax include」命令非常聰明,可以忽略包含檔案中的「:syntax clear」命令。而且,「contains=ALL」之類的引數只會包含在包含檔案中定義的項目,而不是在包含它的檔案中定義的項目。「<sfile>:p:h/」部分使用目前檔案的名稱 (<sfile>),將其展開為完整路徑 (:p),然後取得標頭 (:h)。這會產生檔案的目錄名稱。這會導致包含相同目錄中的 pod.vim 檔案。

44.10 同步

編譯器很容易。它們從檔案的開頭開始,並直接剖析它。Vim 沒有那麼容易。它必須從正在進行編輯的中間位置開始。那麼,它如何知道它的位置?秘密在於「:syntax sync」命令。這會告訴 Vim 如何判斷它的位置。例如,以下命令會告訴 Vim 向後掃描 C 樣式註解的開頭或結尾,並從那裡開始語法著色
:syntax sync ccomment
您可以使用一些引數來調整此處理。「minlines」引數會告訴 Vim 要向後尋找的最小行數,「maxlines」會告訴編輯器要掃描的最大行數。例如,以下命令會告訴 Vim 在畫面頂端之前至少查看 10 行
:syntax sync ccomment minlines=10 maxlines=500
如果它無法在那空間中找出它的位置,它會開始向後搜尋得更遠,直到它找出該怎麼做。但它不會向後搜尋超過 500 行。(較大的「maxlines」會減慢處理速度。較小的「maxlines」可能會導致同步失敗。)為了使同步速度更快,請告訴 Vim 可以跳過哪些語法項目。只有在實際顯示文字時才需要使用的每個匹配和區域都可以賦予「display」引數。根據預設,找到的註解會著色為 Comment 語法群組的一部分。如果您想要以其他方式著色,您可以指定不同的語法群組
:syntax sync ccomment xAltComment
如果您的程式語言中沒有 C 樣式的註解,您可以嘗試另一種同步方法。最簡單的方法是告訴 Vim 向後間隔一定行數,並嘗試從那裡找出問題。以下命令會告訴 Vim 返回 150 行,並從那裡開始剖析
:syntax sync minlines=150
較大的「minlines」值可能會使 Vim 變慢,尤其是在檔案中向後捲動時。最後,您可以使用以下命令指定要尋找的語法群組
:syntax sync match {sync-group-name}
        \ grouphere {group-name} {pattern}
這會告訴 Vim,當它看到 {pattern} 時,名為 {group-name} 的語法群組會在給定模式之後立即開始。{sync-group-name} 用於為此同步規格命名。例如,sh 指令碼語言以「if」開頭 if 語句,以「fi」結尾
if [ --f file.txt ] ; then
echo "檔案存在"
fi
要為此語法定義「grouphere」指令,請使用以下命令
:syntax sync match shIfSync grouphere shIf "\<if\>"
「groupthere」引數會告訴 Vim,模式會結束一個群組。例如,if/fi 群組的結尾如下
:syntax sync match shIfSync groupthere NONE "\<fi\>"
在此範例中,NONE 會告訴 Vim 您不在任何特殊的語法區域中。特別是,您不在 if 區塊內。
您也可以定義不帶 "grouphere" 或 "groupthere" 參數的匹配和區域。這些群組用於同步期間跳過的語法群組。例如,以下範例會跳過大括號 {} 內的所有內容,即使它通常會匹配到其他同步方法。
:syntax sync match xSpecial /{.*}/
關於同步的更多資訊請參考手冊::syn-sync

44.11 安裝語法檔

當您的新語法檔準備好使用時,請將它放入 'runtimepath' 中的 "syntax" 目錄。在 Unix 系統上,這會是 "~/.config/nvim/syntax"。語法檔的名稱必須與檔案類型相同,並加上 ".vim" 副檔名。因此,對於 x 語言,檔案的完整路徑會是
~/.config/nvim/syntax/x.vim
您還必須讓檔案類型被識別。請參閱 43.2
如果您的檔案運作良好,您可能會希望讓其他 Vim 使用者也能使用。首先請閱讀下一節,以確保您的檔案對其他人也運作良好。然後將它以電子郵件寄給 Vim 維護者:<[email protected]>。同時也請說明如何檢測檔案類型。如果運氣好,您的檔案將會被包含在下一個 Vim 版本中!

新增至現有語法檔

我們假設您正在新增一個全新的語法檔。當現有的語法檔運作正常,但缺少某些項目時,您可以在單獨的檔案中新增項目。這樣可以避免修改發行的語法檔,因為安裝新版本的 Vim 時會覆蓋它。請在您的檔案中寫入語法命令,可能使用現有語法中的群組名稱。例如,要將新的變數類型新增到 C 語法檔中
:syntax keyword cType off_t uint
請撰寫與原始語法檔名稱相同的檔案。在此例中為 "c.vim"。將它放置在 'runtimepath' 接近尾端的目錄中。這會使其在原始語法檔之後載入。在 Unix 系統上,這會是
~/.config/nvim/after/syntax/c.vim

44.12 可移植的語法檔佈局

如果所有 Vim 使用者都能交換語法檔,那豈不是很棒?為了實現這一點,語法檔必須遵循一些準則。
從一個標頭開始,說明語法檔的用途、維護者以及上次更新的時間。不要包含太多關於變更歷史的資訊,沒有多少人會閱讀它。範例:
" Vim syntax file
" Language:        C
" Maintainer:        Bram Moolenaar <[email protected]>
" Last Change:        2001 Jun 18
" Remark:        Included by the C++ syntax.
使用與其他語法檔相同的佈局。使用現有的語法檔作為範例可以節省您大量的時間。
為您的語法檔選擇一個好的、描述性的名稱。使用小寫字母和數字。不要讓它太長,它會在許多地方使用:語法檔的名稱 "name.vim"、'filetype'、b:current_syntax 以及每個語法群組的開頭 (nameType、nameStatement、nameString 等)。
首先檢查 "b:current_syntax"。如果已定義,表示在 'runtimepath' 中較早的其他語法檔已被載入。
if exists("b:current_syntax")
  finish
endif
在檔案末尾將 "b:current_syntax" 設定為語法的名稱。別忘了包含的檔案也會這樣做,如果您包含兩個檔案,您可能需要重設 "b:current_syntax"。
不要包含任何使用者偏好設定。不要設定 'tabstop''expandtab' 等。這些應該放在檔案類型外掛程式中。
不要包含映射或縮寫。只有在識別關鍵字時確實必要時,才設定 'iskeyword'
為了讓使用者可以選擇自己偏好的顏色,請為每種高亮顯示的項目建立不同的群組名稱。然後將它們每個都連結到一個標準的高亮群組。這樣可以讓它與每個配色方案一起運作。如果您選擇特定的顏色,在某些配色方案下會看起來很糟糕。別忘了有些人使用不同的背景顏色,或只有八種顏色可用。
對於連結,請使用 "hi def link",以便使用者可以在載入您的語法檔之前選擇不同的高亮顯示。範例:
hi def link nameString        String
hi def link nameNumber        Number
hi def link nameCommand        Statement
... etc ...
將 "display" 參數新增到同步時不使用的項目,以加快向後滾動和 CTRL-L 的速度。
下一章:usr_45.txt 選擇您的語言
版權:請參閱 manual-copyright vim:tw=78:ts=8:noet:ft=help:norl
主要
命令索引
快速參考