語法
Nvim 的 :help
頁面,是使用 tree-sitter-vimdoc 解析器,從 原始碼 產生 而來的。
語法高亮讓 Vim 能夠以不同的字體或顏色顯示文字的某些部分。這些部分可以是特定的關鍵字或符合模式的文字。Vim 不會解析整個檔案(為了保持速度),因此高亮顯示有其局限性。詞彙高亮顯示可能是一個更好的名稱,但由於大家都稱之為語法高亮顯示,我們將繼續使用這個名稱。
Vim 支援在所有終端機上進行語法高亮顯示。但由於大多數普通終端機的高亮顯示功能非常有限,因此在 GUI 版本 gvim 中效果最好。
:syn-enable :syntax-enable :syn-on :syntax-on 語法高亮顯示預設為啟用。如果您需要在停用後再次啟用(請參閱下文),請使用
:syntax enable
或者
:syntax on
這個命令實際執行的操作是執行以下命令
:source $VIMRUNTIME/syntax/syntax.vim
如果沒有設定 VIM 環境變數,Vim 會嘗試以其他方式尋找路徑(請參閱
$VIMRUNTIME)。通常這會運作良好。如果沒有,請嘗試將 VIM 環境變數設定為 Vim 相關檔案所在的目錄。例如,如果您的語法檔案位於「/usr/vim/vim82/syntax」目錄中,請將 $VIMRUNTIME 設定為「/usr/vim/vim82」。您必須在啟動 Vim 之前在 shell 中執行此操作。當 GUI 正在執行或即將啟動時,此命令也會載入
menu.vim 腳本。
注意:MS-Windows 上的語法檔案的行尾為
<CR>
<NL>
。Unix 的檔案行尾為
<NL>
。這表示您應該為您的系統使用正確的檔案類型。雖然在 MS-Windows 上,如果
'fileformats' 選項不為空,則會自動選擇正確的格式。
注意:當使用反向影片(「gvim -fg white -bg black」)時,在 GUI 視窗開啟之前(也就是在讀取
gvimrc 之後),
'background' 的預設值將不會被設定。這會導致使用錯誤的預設高亮顯示。若要在開啟高亮顯示之前設定
'background' 的預設值,請在
gvimrc 中包含「:gui」命令
:gui " open window and set default for 'background'
:syntax on " start highlighting, use 'background' to set colors
注意:在
gvimrc 中使用「:gui」表示「gvim -f」不會在前台啟動!請改用「:gui -f」。
g:syntax_on 您可以使用此命令開啟/關閉語法
:if exists("g:syntax_on") | syntax off | else | syntax enable | endif
若要將此命令放入映射,您可以使用
:map <F7> :if exists("g:syntax_on") <Bar>
\ syntax off <Bar>
\ else <Bar>
\ syntax enable <Bar>
\ endif <CR>
[使用
<> 符號,請照字面輸入]
詳細資訊:「:syntax」命令是透過載入檔案來實作的。若要查看其運作方式的詳細資訊,請查看檔案
命令檔案
:syntax enable $VIMRUNTIME/syntax/syntax.vim :syntax on $VIMRUNTIME/syntax/syntax.vim :syntax manual $VIMRUNTIME/syntax/manual.vim :syntax off $VIMRUNTIME/syntax/nosyntax.vim 另請參閱
syntax-loading。
注意:如果顯示長行速度很慢,而關閉語法高亮顯示會使其變快,請考慮將
'synmaxcol' 選項設定為較低的值。
一種語言的語法和高亮顯示命令通常儲存在一個語法檔案中。命名慣例為:「{name}.vim」。其中 {name}
是語言的名稱,或縮寫(以便將名稱放入 8.3 個字元中,如果該檔案在 DOS 檔案系統上使用,這是一個要求)。範例:c.vim perl.vim java.vim html.vim cpp.vim sh.vim csh.vim
語法檔案可以包含任何 Ex 命令,就像 vimrc 檔案一樣。但其概念是僅包含特定語言的命令。當一種語言是另一種語言的超集時,它可能會包含另一種語言,例如,cpp.vim 檔案可以包含 c.vim 檔案
:so $VIMRUNTIME/syntax/c.vim
.vim 檔案通常會透過自動命令載入。例如
:au Syntax c runtime! syntax/c.vim
:au Syntax cpp runtime! syntax/cpp.vim
這些命令通常位於 $VIMRUNTIME/syntax/synload.vim 檔案中。
當您建立自己的語法檔案,而且您希望 Vim 使用「:syntax enable」自動使用這些檔案時,請執行以下操作
1. 建立您的使用者執行階段目錄。您通常會使用
'runtimepath' 選項的第一個項目。Unix 的範例
mkdir ~/.config/nvim
2. 在其中建立一個名為「syntax」的目錄。Unix 的範例
mkdir ~/.config/nvim/syntax
3. 編寫 Vim 語法檔案。或從網際網路下載一個。然後將其寫入您的語法目錄。例如,對於「mine」語法
:w ~/.config/nvim/syntax/mine.vim
現在您可以開始手動使用您的語法檔案
:set syntax=mine
您不需要退出 Vim 才能使用它。
如果您要設定具有許多使用者的系統,而且您不希望每個使用者都新增相同的語法檔案,您可以使用
'runtimepath' 中的另一個目錄。
如果您對現有的語法檔案大多感到滿意,但想新增一些項目或變更高亮顯示,請按照以下步驟操作
2. 在其中建立一個名為「after/syntax」的目錄。Unix 的範例
mkdir -p ~/.config/nvim/after/syntax
3. 編寫一個 Vim 腳本,其中包含您想要使用的命令。例如,若要變更 C 語法的顏色
highlight cComment ctermfg=Green guifg=Green
4. 將該檔案寫入「after/syntax」目錄。使用語法的名稱,並加上「.vim」。對於我們的 C 語法
:w ~/.config/nvim/after/syntax/c.vim
就是這樣。下次您編輯 C 檔案時,註解的顏色會不同。您甚至不需要重新啟動 Vim。
如果您有多個檔案,您可以使用檔案類型作為目錄名稱。此目錄中的所有「*.vim」檔案都會使用,例如:~/.config/nvim/after/syntax/c/one.vim ~/.config/nvim/after/syntax/c/two.vim
如果您不喜歡散發的語法檔案,或您已下載新版本,請按照與上方
mysyntaxfile 相同的步驟操作。只要確定您將語法檔案寫入
'runtimepath' 中較早的目錄即可。Vim 只會載入找到的第一個語法檔案,並假設該檔案設定了 b:current_syntax。
語法群組名稱用於符合相同類型的語法項目。這些項目接著會連結到指定顏色的高亮顯示群組。語法群組名稱本身不會指定任何顏色或屬性。
高亮顯示或語法群組的名稱必須由 ASCII 字母、數字、底線、點、連字號或
@
組成。作為 regexp:
[a-zA-Z0-9_.@-]*
。群組名稱的最大長度約為 200 個位元組。
E1249
為了讓每個使用者都能選擇他們最喜歡的顏色集,必須為許多語言共用的高亮顯示群組提供慣用的名稱。這些是建議的群組名稱(如果語法高亮顯示正常運作,您可以看到實際顏色,除了「Ignore」之外)
Comment 任何註解
Constant 任何常數 String 字串常數:「this is a string」 Character 字元常數:'c'、'\n' Number 數字常數:234、0xff Boolean 布林常數:TRUE、false Float 浮點常數:2.3e10
Identifier 任何變數名稱 Function 函式名稱(也包含:類別的方法)
Statement 任何陳述式 Conditional if、then、else、endif、switch 等 Repeat for、do、while 等 Label case、default 等 Operator 「sizeof」、「+」、「*」等 Keyword 任何其他關鍵字 Exception try、catch、throw
PreProc 一般前置處理器 Include 前置處理器 #include Define 前置處理器 #define Macro 與 Define 相同 PreCondit 前置處理器 #if、#else、#endif 等
Type int、long、char 等 StorageClass static、register、volatile 等 Structure struct、union、enum 等 Typedef typedef
Special 任何特殊符號 SpecialChar 常數中的特殊字元 Tag 您可以在此處使用 CTRL-]
Delimiter 需要注意的字元 SpecialComment 註解中的特殊內容 Debug 偵錯陳述式
Underlined 突顯的文字、HTML 連結
Error 任何錯誤的建構
Todo 任何需要額外注意的事項;主要是關鍵字 TODO FIXME 和 XXX
Added diff 中新增的行 Changed diff 中變更的行 Removed diff 中移除的行
標有 * 號的名稱是慣用群組;其他則是次要群組。對於慣用群組,「syntax.vim」檔案包含預設的高亮顯示。次要群組會連結到慣用群組,因此它們會獲得相同的高亮顯示。您可以在載入「syntax.vim」檔案後使用「:highlight」命令來覆寫這些預設值。
請注意,高亮顯示群組名稱不區分大小寫。「String」和「string」可以用於同一個群組。
以下名稱是保留名稱,不能用作群組名稱:NONE ALL ALLBUT contains contained
這說明了當執行指令 ":syntax enable" 時會發生的詳細步驟。當 Vim 初始化時,它會找出執行時期檔案的位置。這裡將其用作變數
$VIMRUNTIME。
":syntax enable" 和 ":syntax on" 會執行以下操作
載入 $VIMRUNTIME/syntax/syntax.vim | +- 透過載入 $VIMRUNTIME/syntax/nosyntax.vim 清除任何舊語法 | +- 載入
'runtimepath' 中的第一個 syntax/synload.vim | | | +- 設定語法自動指令,以便在 | | 設定
'syntax' 選項時載入適當的語法檔案。
synload-1 | | | +- 從
mysyntaxfile 變數載入使用者的可選檔案。| 這僅為了與 Vim 5.x 的回溯相容性。
synload-2 | +- 執行 ":filetype on",這會執行 ":runtime! filetype.vim"。它會載入任何 | 找到的 filetype.vim 檔案。它應該始終載入 | $VIMRUNTIME/filetype.vim,這會執行以下操作。| | | +- 安裝基於副檔名的自動指令,以設定
'filetype' 選項 | | 這是為已知檔案類型建立檔案名稱和檔案類型之間連結的地方。
synload-3 | | | +- 從
myfiletypefile | | 變數載入使用者的可選檔案。這僅為了與 Vim 5.x 的回溯相容性。 | |
synload-4 | | | +- 安裝一個自動指令,該指令會在尚未偵測到檔案類型時載入 scripts.vim。
synload-5 | | | +- 載入 $VIMRUNTIME/menu.vim,以設定語法選單。
menu.vim | +- 安裝一個 FileType 自動指令,以便在偵測到檔案類型時設定
'syntax' 選項。
synload-6 | +- 執行語法自動指令,以開始為每個已載入的緩衝區進行語法突顯。
載入檔案時,Vim 會依以下方式找到相關的語法檔案
舊的 HTML 轉換器已被 Lua 版本取代,並且文件已移至
:TOhtml。
b:current_syntax 變數 Vim 會將已載入的語法名稱儲存在 "b:current_syntax" 變數中。如果您想要載入其他設定 (取決於哪個語法處於活動狀態),則可以使用此變數。範例
:au BufReadPost * if b:current_syntax == "csh"
:au BufReadPost * do-some-things
:au BufReadPost * endif
ABEL 突顯提供了一些使用者定義的選項。若要啟用它們,請將任何值指派給個別的變數。範例
:let abel_obsolete_ok=1
若要停用它們,請使用 ":unlet"。範例
:unlet abel_obsolete_ok
變數 突顯
abel_obsolete_ok 過時的關鍵字是陳述式,而不是錯誤 abel_cpp_comments_illegal 不將 '//' 解譯為內嵌註解符號
ADA
預設情況下,ant 語法檔案提供 javascript 和 python 的語法突顯。可以使用 AntSyntaxScript() 函式安裝其他指令碼語言的語法突顯,該函式將標籤名稱作為第一個引數,並將指令碼語法檔案名稱作為第二個引數。範例
:call AntSyntaxScript('perl', 'perl.vim')
會為以下 ant 程式碼安裝語法 perl 突顯
<script language = 'perl'><![CDATA[
# everything inside is highlighted as perl
]]></script>
請參閱
mysyntaxfile-add 以永久安裝指令碼語言。
apache 語法檔案提供 Apache HTTP 伺服器 2.2.3 版的語法突顯。
符合 "*.i" 的檔案可能是 Progress 或 Assembly。如果自動偵測對您不起作用,或者您根本不編輯 Progress,請在您的啟動 vimrc 中使用此項
:let filetype_i = "asm"
將 "asm" 替換為您使用的組合類型。
有許多類型的組合語言都使用相同的檔案名稱副檔名。因此,您必須自行選擇類型,或在 Vim 將會識別的組合檔案中新增一行。目前包含以下語法檔案:asm GNU 組合 (預設值) asm68k Motorola 680x0 組合 asmh8300 GNU 組合的 Hitachi H-8300 版本 ia64 Intel Itanium 64 fasm 平面組合 (
https://flatassembler.net) masm Microsoft 組合 (可能適用於任何 80x86) nasm Netwide 組合 tasm Turbo Assembly (具有高達 Pentium 和 MMX 的 80x86 opcode) pic PIC 組合 (目前用於 PIC16F84)
最靈活的方法是在您的組合檔案中新增一行,其中包含
asmsyntax=nasm
將 "nasm" 替換為實際組合語法的名稱。此行必須是檔案中的前五行之一。在此文字之前或之後不得有非空白文字。請注意,指定 asmsyntax=foo 等同於在
modeline 中設定 ft=foo,並且在兩個設定之間發生衝突時,modeline 中的設定會優先 (特別是,如果您在 modeline 中設定 ft=asm,則無論指定為 asmsyntax 的是什麼,您都會獲得 GNU 語法突顯)。
您可以隨時透過設定 b:asmsyntax 變數來覆寫特定緩衝區的語法類型
:let b:asmsyntax = "nasm"
如果未自動或手動設定 b:asmsyntax,則會使用全域變數 asmsyntax 的值。這可以視為預設組合語言
:let asmsyntax = "nasm"
最後,如果未定義任何內容,則會使用 "asm" 語法。
Netwide assembler (nasm.vim) 可選的突顯
若要啟用功能
:let {variable}=1|set syntax=nasm
若要停用功能
:unlet {variable} |set syntax=nasm
變數 突顯
nasm_loose_syntax 非官方剖析器允許的語法不會顯示為錯誤 (相依於剖析器;不建議) nasm_ctx_outside_macro 巨集外部的內容不會顯示為錯誤 nasm_no_warn 潛在的風險語法不會顯示為待辦事項
組態
以下變數會控制某些語法突顯功能。您可以將它們新增至您的 .vimrc。
若要為 ".astro" 檔案啟用 TypeScript 和 TSX (預設為「停用」)
let g:astro_typescript = "enable"
若要為 ".astro" 檔案啟用 Stylus (預設為「停用」)
let g:astro_stylus = "enable"
注意:您需要安裝外部外掛程式才能支援 astro 檔案中的 stylus。
*.asp
和
*.asa
檔案可能是 Perl 或 Visual Basic 指令碼。由於很難偵測到這一點,您可以設定兩個全域變數來告知 Vim 您正在使用什麼。針對 Perl 指令碼,請使用
:let g:filetype_asa = "aspperl"
:let g:filetype_asp = "aspperl"
針對 Visual Basic,請使用
:let g:filetype_asa = "aspvbs"
:let g:filetype_asp = "aspvbs"
預設情況下,僅會突顯基本的 Asymptote 關鍵字。若要突顯擴展的幾何關鍵字
:let g:asy_syn_plain = 1
以及突顯與 3D 建構相關的關鍵字
:let g:asy_syn_three = 1
預設情況下,會突顯 Asymptote 定義的色彩 (例如:lightblue)。若要突顯 TeX 定義的色彩 (例如:BlueViolet),請使用
:let g:asy_syn_texcolors = 1
或針對 Xorg 色彩 (例如:AliceBlue)
:let g:asy_syn_x11colors = 1
baan.vim 提供 BaanC (BaanIV 版本至 SSA ERP LN) 的語法支援,適用於 3 GL 和 4 GL 程式設計。支援大量標準定義/常數。
可以透過以下提及的變數在各種層級啟用語法摺疊 (在您的
init.vim 中設定這些變數)。在來源區塊和 SQL 上進行更複雜的摺疊可能會耗費 CPU 資源。
若要允許任何摺疊並在函式層級啟用摺疊,請使用
let baan_fold=1
可以在來源區塊層級啟用摺疊,如 if、while、for 等。begin/end 關鍵字前面的縮排必須相符 (空格不被視為與 Tab 相等)。
let baan_fold_block=1
可以針對內嵌 SQL 區塊啟用摺疊,如 SELECT、SELECTDO、SELECTEMPTY 等。begin/end 關鍵字前面的縮排必須相符 (空格不被視為與 Tab 相等)。
let baan_fold_sql=1
注意:區塊摺疊可能會產生許多小的摺疊。建議在
init.vim 中
:set 選項
'foldminlines' 和
'foldnestmax',或在 .../after/syntax/baan.vim 中使用
:setlocal (請參閱
after-directory)。例如
set foldminlines=5
set foldnestmax=6
Visual Basic 和「一般」BASIC 都使用副檔名 ".bas"。若要偵測應使用哪一個,Vim 會檢查檔案前五行中是否具有字串 "VB_Name"。如果找不到,檔案類型將會是 "basic",否則為 "vb"。副檔名為 ".frm" 的檔案一律會被視為 Visual Basic。
如果自動偵測對您不起作用,或者您僅編輯 (例如) FreeBASIC 檔案,請在您的啟動 vimrc 中使用此項
:let filetype_bas = "freebasic"
C
c.vim ft-c-syntax
C 語言的一些語法高亮是可選的。要啟用它們,請為相應的變數賦予任何值(包括零)。範例:
:let c_comment_strings = 1
:let c_no_bracket_error = 0
要停用它們,請使用
:unlet
。範例:
:unlet c_comment_strings
將值設定為零是無效的!
當
'foldmethod' 設定為 "syntax" 時,
/* */
註解和 { } 區塊將會變成一個摺疊。如果你不希望註解變成一個摺疊,請使用
:let c_no_comment_fold = 1
"#if 0" 區塊也會被摺疊,除非
:let c_no_if0_fold = 1
如果你注意到向後捲動時出現語法高亮錯誤,並且使用
CTRL-L
重新繪製時修正了這些錯誤,請嘗試將 "c_minlines" 內部變數設定為更大的數字
:let c_minlines = 100
這會讓語法同步從第一個顯示行之前的 100 行開始。預設值為 50(當設定 c_no_if0 時為 15)。使用較大數字的缺點是重新繪製可能會變慢。
當使用 "#if 0" / "#endif" 註解高亮時,請注意,這只有在 "#if 0" 位於視窗頂端 "c_minlines" 範圍內時才有效。如果你的 "#if 0" 結構很長,它將無法正確高亮顯示。
若要在註解中比對額外項目,請使用 cCommentGroup 群組。範例:
:au Syntax c call MyCadd()
:function MyCadd()
: syn keyword cMyItem contained Ni
: syn cluster cCommentGroup add=cMyItem
: hi link cMyItem Title
:endfun
ANSI 常數將使用 "cConstant" 群組高亮顯示。這包括 "NULL"、"SIG_IGN" 等,但不包括 "TRUE",例如,因為它不在 ANSI 標準中。如果你覺得這令人困惑,請移除 cConstant 高亮顯示
:hi link cConstant NONE
如果你看到 '{' 和 '}' 在它們正常的地方被高亮為錯誤,請重設 cErrInParen 和 cErrInBracket 的高亮顯示。
如果你想在 C 檔案中使用摺疊,你可以將這些行加入到
'runtimepath' 中 "after" 目錄下的檔案中。對於 Unix,這會是 ~/.config/nvim/after/syntax/c.vim。
syn sync fromstart
set foldmethod=syntax
C/C++ 直譯器。Ch 的語法高亮與 C 相似,並建立在 C 語法檔案之上。請參閱
c.vim 以瞭解 C 的所有可用設定。
透過設定一個變數,你可以告訴 Vim 對
*.h
檔案使用 Ch 語法,而不是 C 或 C++
:let ch_syntax_for_h = 1
Chill 的語法高亮與 C 相似。請參閱
c.vim 以瞭解所有可用的設定。此外,還有
chill_space_errors 類似於 c_space_errors,chill_comment_string 類似於 c_comment_strings,chill_minlines 類似於 c_minlines
ChangeLog 支援高亮顯示行首的空格。如果你不喜歡這樣,請將以下行加入你的 vimrc
let g:changelog_spacing_errors = 0
這會在下次編輯 changelog 檔案時生效。你也可以使用 "b:changelog_spacing_errors" 來設定每個緩衝區的設定(在載入語法檔案之前)。
你可以變更使用的高亮顯示方式,例如,將空格標示為錯誤
:hi link ChangelogError Error
或者避免高亮顯示
:hi link ChangelogError NONE
這會立即生效。
預設會提供 "clojure.core" 中 public 變數的語法高亮,但是可以透過將它們加入
g:clojure_syntax_keywords 變數來高亮顯示其他符號。值應該是語法群組名稱的
字典,每個字典都包含一個
清單 的識別符。
let g:clojure_syntax_keywords = {
\ 'clojureMacro': ["defproject", "defcustom"],
\ 'clojureFunc': ["string/join", "string/replace"]
\ }
請參閱 Clojure 語法腳本,以瞭解有效的語法群組名稱。
將此變數設定為
1
以啟用 Clojure「捨棄讀取器巨集」的基本高亮顯示。
#_(defn foo [x]
(println x))
請注意,此選項不會正確高亮顯示堆疊的捨棄巨集(例如 #_#_
)。
COBOL 高亮顯示對於舊版程式碼的需求與新開發有所不同。這是因為所做的事情(維護與開發)和其他因素的差異。若要啟用舊版程式碼高亮顯示,請將此行加入你的 vimrc
:let cobol_legacy_code = 1
若要再次停用它,請使用此
:unlet cobol_legacy_code
ColdFusion 有其自己的 HTML 註解版本。若要啟用 ColdFusion 註解高亮顯示,請將以下行加入你的啟動檔案
:let html_wrong_comments = 1
ColdFusion 語法檔案是以 HTML 語法檔案為基礎。
變數 突顯
cpp_no_cpp11 不高亮顯示 C++11 標準項目 cpp_no_cpp14 不高亮顯示 C++14 標準項目 cpp_no_cpp17 不高亮顯示 C++17 標準項目 cpp_no_cpp20 不高亮顯示 C++20 標準項目
這涵蓋名為 "csh" 的 shell。請注意,在某些系統上實際使用的是 tcsh。
偵測檔案是 csh 還是 tcsh 是一項出了名的困難任務。有些系統會將 /bin/csh 符號連結到 /bin/tcsh,使得幾乎不可能區分 csh 和 tcsh。如果 VIM 猜錯了,你可以設定 "filetype_csh" 變數。若要使用 csh:
g:filetype_csh:let g:filetype_csh = "csh"
若要使用 tcsh
:let g:filetype_csh = "tcsh"
任何具有 tcsh 副檔名或標準 tcsh 檔案名稱(.tcshrc、tcsh.tcshrc、tcsh.login)的腳本都會有 tcsh 檔案類型。所有其他 tcsh/csh 腳本都會被歸類為 tcsh,除非存在 "filetype_csh" 變數。如果 "filetype_csh" 變數存在,則檔案類型將設定為該變數的值。
如果你變更 CSV 檔案的分隔符號,它的語法高亮將不再符合變更的檔案內容。你需要取消設定以下變數
:unlet b:csv_delimiter
然後儲存並重新載入檔案
:w
:e
現在,語法引擎應該會判斷新變更的 CSV 分隔符號。
Cynlib 檔案是 C++ 檔案,使用 Cynlib 類別庫來啟用使用 C++ 的硬體建模和模擬。通常,Cynlib 檔案具有 .cc 或 .cpp 副檔名,這使得很難將它們與正常的 C++ 檔案區分開來。因此,若要啟用 .cc 檔案的 Cynlib 高亮顯示,請將此行加入你的 vimrc 檔案
:let cynlib_cyntax_for_cc=1
對於 cpp 檔案也是如此(此副檔名通常僅在 Windows 中使用)
:let cynlib_cyntax_for_cpp=1
若要再次停用這些,請使用此
:unlet cynlib_cyntax_for_cc
:unlet cynlib_cyntax_for_cpp
符合 "*.w" 的檔案可能是 Progress 或 cweb。如果自動偵測對你無效,或者你根本不編輯 Progress,請在你的啟動 vimrc 中使用此
:let filetype_w = "cweb"
Dart 是一種物件導向、具型別、類別定義的、垃圾回收的語言,用於開發行動、桌面、網路和後端應用程式。Dart 使用衍生自 C、Java 和 JavaScript 的類 C 語法,並採用了 Smalltalk、Python、Ruby 等語言的功能。
dart.vim 語法會偵測並高亮顯示 Dart 陳述式、保留字、類型宣告、儲存類別、條件式、迴圈、內插值和註解。不支援 Flutter 或任何其他 Dart 框架的慣用語。
變更、修正?透過以下網址提交問題或提取請求
差異高亮顯示通常會找到翻譯過的標頭。如果檔案中有非常長的行,這可能會很慢。若要停用翻譯功能
:let diff_translations = 0
另請參閱
diff-slow。
dircolors 公用程式的高亮顯示定義有一個選項。它的存在是為了提供與 Slackware GNU/Linux 發行版命令的相容性。它添加了一些通常被大多數版本忽略的關鍵字。然而,在 Slackware 系統上,該公用程式會接受這些關鍵字並用於處理。若要啟用 Slackware 關鍵字,請將以下行添加到您的啟動檔案中
let dircolors_is_slackware = 1
DocBook 檔案有兩種型別:SGML 和 XML。要指定您使用的型別,應設定 "b:docbk_type" 變數。如果 Vim 可以識別型別,它會自動執行此操作。當 Vim 無法猜測時,型別預設為 XML。您可以手動設定型別
:let docbk_type = "sgml"
或
:let docbk_type = "xml"
您需要在載入語法檔案之前執行此操作,這很複雜。更簡單的方法是將檔案型別設定為 "docbkxml" 或 "docbksgml"
:set filetype=docbksgml
或
:set filetype=docbkxml
您可以指定 DocBook 版本
:let docbk_ver = 3
未設定時,會使用 4。
使用變數 dosbatch_cmdextversion 選擇應支援的 Windows 命令解譯器擴充功能集合。對於 Windows NT 版本(在 Windows 2000 之前),此值應為 1。對於 Windows 2000 及更新版本,應為 2。使用以下行選擇您想要的版本
:let dosbatch_cmdextversion = 1
如果未定義此變數,則預設值為 2,以支援 Windows 2000 及更新版本。
原始的 MS-DOS 支援使用雙冒號 (::) 作為輸入註解行的替代方法。此慣用語可以與目前的 Windows 命令解譯器一起使用,但在 ( ... ) 命令區塊內使用時可能會導致問題。您可以在 Stack Overflow 上找到關於此問題的討論 -
若要允許在 Windows 命令解譯器的命令區塊中使用 :: 慣用語作為註解,請將 dosbatch_colons_comment 變數設定為任何值
:let dosbatch_colons_comment = 1
如果設定了此變數,則命令區塊中最後一行的 :: 註解將會以錯誤方式高亮顯示。
有一個選項可以涵蓋是否應將
*.btm
檔案偵測為「dosbatch」型別(MS-DOS 批次檔)或「btm」型別(4DOS 批次檔)。預設使用後者。您可以使用以下行選擇前者
:let g:dosbatch_syntax_for_btm = 1
如果未定義或為零,則會選取 btm 語法。
Doxygen 使用特殊的說明文件格式(類似於 Javadoc)產生程式碼說明文件。此語法腳本會將 doxygen 高亮顯示新增至 c、cpp、idl 和 php 檔案,並且也應該適用於 java。
有幾種開啟 doxygen 格式化的方法。它可以透過明確的方式或在模型行中,將 '.doxygen' 附加到檔案的語法來完成。範例
:set syntax=c.doxygen
或
// vim:syntax=c.doxygen
也可以透過設定全域或緩衝區本機變數 load_doxygen_syntax,針對 C、C++、C#、IDL 和 PHP 檔案自動完成。這可以透過將以下內容新增至您的 vimrc 來完成。
:let g:load_doxygen_syntax=1
有幾個變數會影響語法高亮顯示,並且與非標準高亮顯示選項有關。
變數 預設 效果
g:doxygen_enhanced_color g:doxygen_enhanced_colour 0 將非標準高亮顯示用於 doxygen 註解。
doxygen_my_rendering 0 停用 HTML 粗體、斜體和 html_my_rendering 底線的呈現。
doxygen_javadoc_autobrief 1 設定為 0 以停用 javadoc autobrief 顏色高亮顯示。
doxygen_end_punctuation '[.]' 設定為簡短結尾標點符號的 regexp 比對
還有一些值得一提的高亮顯示群組,因為它們在設定中可能很有用。
高亮顯示 效果
doxygenErrorComment 當程式碼、逐字或點區段中缺少標點符號時,結尾註解的顏色 doxygenLinkError 當 \link 區段中缺少 \endlink 時,結尾註解的顏色。
DTD 語法高亮顯示預設會區分大小寫。若要停用區分大小寫的高亮顯示,請將以下行新增至您的啟動檔案
:let dtd_ignore_case=1
DTD 語法檔案會將未知的標籤高亮顯示為錯誤。如果這很煩人,可以透過設定來關閉它
:let dtd_no_tag_errors=1
在來源 dtd.vim 語法檔案之前。在定義中,參數實體名稱會使用 'Type' 高亮顯示群組來高亮顯示,而標點符號和 '%' 則使用 'Comment'。參數實體實例會使用 'Constant' 高亮顯示群組來高亮顯示,而分隔符號 % 和 ; 則使用 'Type' 高亮顯示群組。可以透過設定來關閉此功能
:let dtd_no_param_entities=1
xml.vim 也會包含 DTD 語法檔案,以高亮顯示包含的 dtd。
雖然 Eiffel 不區分大小寫,但其樣式指南會區分大小寫,且語法高亮顯示檔案會鼓勵使用它們。這也可以讓類別名稱以不同的方式高亮顯示。如果您想要停用區分大小寫的高亮顯示,請將以下行新增至您的啟動檔案
:let eiffel_ignore_case=1
大小寫在類別名稱和註解中的 TODO 標記中仍然很重要。
相反地,若要進行更嚴格的檢查,請新增下列其中一行
:let eiffel_strict=1
:let eiffel_pedantic=1
設定 eiffel_strict 將只會捕捉五個預先定義的單字 "Current"、"Void"、"Result"、"Precursor" 和 "NONE" 的不正確大寫,以警告它們被意外用作功能或類別名稱。
設定 eiffel_pedantic 將會相當嚴格地強制遵守 Eiffel 樣式指南(例如大寫和小寫字母的任意混合,以及過時的大寫關鍵字方式)。
如果您想要使用 "Current"、"Void"、"Result" 和 "Precursor" 的小寫版本,您可以使用
:let eiffel_lower_case_predef=1
而不是完全關閉區分大小寫的高亮顯示。
可以透過以下方式啟用 ISE 建議的新建構語法,該語法已經由某些編譯器實驗性地處理
:let eiffel_ise=1
最後,某些供應商支援十六進位常數。若要處理它們,請新增
:let eiffel_hex_constants=1
到您的啟動檔案。
Euphoria 存在兩個語法高亮顯示檔案。一個用於 Euphoria 3.1.1 版,這是預設的語法高亮顯示檔案,另一個用於 Euphoria 4.0.5 或更新版本。
以下檔案副檔名會自動偵測為 Euphoria 檔案型別
*.e, *.eu, *.ew, *.ex, *.exu, *.exw
*.E, *.EU, *.EW, *.EX, *.EXU, *.EXW
若要選取 Euphoria 的語法高亮顯示檔案,以及自動偵測
*.e
和
*.E
檔案副檔名作為 Euphoria 檔案型別,請將以下行新增至您的啟動檔案
:let g:filetype_euphoria = "euphoria3"
或
:let g:filetype_euphoria = "euphoria4"
Elixir 和 Euphoria 共用
*.ex
檔案副檔名。如果使用 g:filetype_euphoria 變數將檔案型別特別設定為 Euphoria,或根據檔案中的關鍵字判斷檔案為 Euphoria,則檔案型別將會設定為 Euphoria。否則,檔案型別將會預設為 Elixir。
Erlang 是 Ericsson 開發的功能性程式設計語言。具有以下副檔名的檔案會被識別為 Erlang 檔案:erl、hrl、yaws。
BIF(內建函式)預設會高亮顯示。若要停用此功能,請將以下行放入您的 vimrc
:let g:erlang_highlight_bifs = 0
若要啟用某些特殊原子的高亮顯示,請將此放入您的 vimrc
:let g:erlang_highlight_special_atoms = 1
Elixir 是一種動態功能語言,用於建構可擴展且可維護的應用程式。
以下檔案副檔名會自動偵測為 Elixir 檔案型別
*.ex, *.exs, *.eex, *.leex, *.lock
Elixir 和 Euphoria 共用
*.ex
檔案副檔名。如果使用 g:filetype_euphoria 變數將檔案型別特別設定為 Euphoria,或根據檔案中的關鍵字判斷檔案為 Euphoria,則檔案型別將會設定為 Euphoria。否則,檔案型別將會預設為 Elixir。
語法高亮顯示適用於 FlexWiki 語法中最常見的元素。相關聯的 ftplugin 腳本會設定一些緩衝區本機選項,以使編輯 FlexWiki 頁面更方便。FlexWiki 會將換行符號視為新段落的開始,因此 ftplugin 會設定
'tw'=0(無限行長度)、
'wrap'(換行長行而不是使用水平捲動)、
'linebreak'(在
'breakat' 中的字元處換行,而不是在螢幕上的最後一個字元處),依此類推。它還包含一些預設停用的按鍵對應。
如果您想要啟用按鍵對應,讓 "j" 和 "k" 以及游標按鍵依顯示行向上和向下移動,請將此新增至您的 vimrc
:let flexwiki_maps = 1
FORM 檔案中語法元素著色配置使用預設模式 Conditional、Number、Statement、Comment、PreProc、Type 和 String,遵循 J.A.M. Vermaseren 的「Symbolic Manipulation with FORM」(荷蘭 CAN,1991 年)中的語言規範。
如果您想要在預設顏色中包含自己的變更,您必須重新定義以下語法群組
formConditional
formNumber
formStatement
formHeaderStatement
formComment
formPreProc
formDirective
formType
formString
請注意,form.vim 語法檔案預設會在相同的語法群組中實作 FORM 前置處理器命令和指示詞。
針對 FORM 程式,提供預定義的增強色彩模式,可區分標頭陳述式和程式主體中的陳述式。若要啟用此模式,請在您的 vimrc 檔案中定義下列變數:
:let form_enhanced_color=1
增強模式也為深色 gvim 顯示器利用了額外的色彩功能。在此模式下,陳述式會以淺黃色而非黃色著色,條件式則會以淺藍色著色,以獲得更好的區分。
Visual Basic 和 FORM 都使用 ".frm" 副檔名。為了偵測應使用哪一個,Vim 會檢查檔案前五行中是否有字串 "VB_Name"。如果找到,檔案類型將為 "vb",否則為 "form"。
如果自動偵測對您不起作用,或者您只編輯 FORM 檔案,請在您的啟動 vimrc 中使用以下設定:
:let filetype_frm = "form"
符合 "*.f" 的檔案可能是 Fortran 或 Forth,而符合 "*.fs" 的檔案可能是 F# 或 Forth。如果自動偵測對您不起作用,或者您根本不編輯 F# 或 Fortran,請在您的啟動 vimrc 中使用以下設定:
:let filetype_f = "forth"
:let filetype_fs = "forth"
預設語法高亮和方言
Vim 會根據 Fortran 2023(最新的標準)進行語法高亮。此選擇應在大多數情況下適用於大多數使用者,因為 Fortran 2023 幾乎是先前版本(Fortran 2018、2008、2003、95、90、77 和 66)的超集合。最近的 Fortran 標準中刪除或宣告過時的一些舊有結構會被標記為錯誤和待辦事項。
語法腳本不再支援 Fortran 方言。變數 fortran_dialect 現在會被靜默忽略。由於現在電腦速度快得多,因此不再需要變數 fortran_more_precise,並會被靜默忽略。
Fortran 原始碼格式
Fortran 程式碼可以是固定或自由格式。請注意,如果格式設定不正確,語法高亮將不正確。
當您建立新的 Fortran 檔案時,語法腳本會假定為固定格式。如果您總是使用自由格式,則請使用以下設定:
:let fortran_free_source=1
如果您總是使用固定格式,則請使用以下設定:
:let fortran_fixed_source=1
如果原始碼的格式以非標準方式取決於副檔名,則在 ftplugin 檔案中設定 fortran_free_source 最方便。有關 ftplugin 檔案的更多資訊,請參閱
ftplugin。請注意,只有在您的 .vimrc 檔案中,"filetype plugin indent on" 命令在 "syntax on" 命令之前,此設定才會生效。
當您編輯現有的 Fortran 檔案時,如果已設定 fortran_free_source 變數,語法腳本會假定為自由格式,如果已設定 fortran_fixed_source 變數,則假定為固定格式。假設這兩個變數都未設定。在這種情況下,語法腳本會嘗試使用 ifort、gfortran、Cray、NAG 和 PathScale 編譯器通用的慣例 (固定格式的 .f、.for、.f77,自由格式的 .f90、.f95、.f03、.f08) 檢查檔案副檔名,以確定使用了哪種原始碼格式。對於 .fpp 和 .ftn 副檔名,不使用預設值,因為不同的編譯器對它們的處理方式不同。如果所有這些方法都行不通,則腳本會檢查您檔案的前 500 行的前五個欄位。如果未偵測到自由格式的跡象,則假定該檔案為固定格式。該演算法應在絕大多數情況下有效。在某些情況下,例如以 500 個或更多整行註解開頭的檔案,腳本可能會錯誤地判斷程式碼為固定格式。如果發生這種情況,只需在前面 25 行的前五個欄位的任何位置新增一個非註解陳述式,儲存 (:w),然後重新載入 (:e!) 檔案即可。
供應商擴充功能
固定格式的 Fortran 要求最大行長度為 72 個字元,但腳本允許最大行長度為 80 個字元,就像過去 30 年建立的所有編譯器一樣。如果您使用如下命令設定變數 fortran_extended_line_length,則允許更長的 132 個字元行長度:
:let fortran_extended_line_length=1
如果您想要額外高亮 CUDA Fortran 擴充功能,則應使用如下命令設定變數 fortran_CUDA:
:let fortran_CUDA=1
若要啟用對一些常見的非標準、供應商提供的內建函數的識別,您應該使用如下命令設定變數 fortran_vendor_intrinsics:
:let fortran_vendor_intrinsics=1
Fortran 檔案中的 Tab
Fortran 標準不識別 Tab。在需要固定欄位邊界的固定格式 Fortran 原始碼中,Tab 並非好主意。因此,Tab 會被標記為錯誤。儘管如此,有些程式設計人員喜歡使用 Tab。如果您的 Fortran 檔案包含 Tab,則您應該使用如下命令在您的 vimrc 中設定變數 fortran_have_tabs:
:let fortran_have_tabs=1
不幸的是,使用 Tab 將表示語法檔案將無法偵測不正確的邊界。
Fortran 檔案的語法摺疊
如果您使用如下命令在您的 .vimrc 中設定變數 fortran_fold,Vim 將使用 foldmethod=syntax 來摺疊您的檔案:
:let fortran_fold=1
指示語法腳本為程式單元定義摺疊區域,即以 program 陳述式開始的主程式、子常式、函數子程式、模組、子模組、註解行區塊和區塊資料單元。區塊、介面、關聯、關鍵、類型定義和變更團隊結構也會被摺疊。如果您還使用如下命令設定變數 fortran_fold_conditionals:
:let fortran_fold_conditionals=1
則也會為 do 迴圈、if 區塊、select case、select type 和 select rank 結構定義摺疊區域。請注意,對於大型檔案,定義摺疊區域可能會很慢。
syntax/fortran.vim 腳本包含嵌入式註解,告訴您如何註解和/或取消註解某些行,以 (a) 啟用對一些非標準、供應商提供的內建函數的識別,以及 (b) 防止將 2008 標準中刪除或宣告過時的功能高亮為待辦事項。
限制
括號檢查不會捕捉到關閉括號太少的情況。不識別 Hollerith 字串。由於 Fortran90 沒有保留字,因此某些關鍵字可能會被錯誤地高亮顯示。
FreeBASIC 檔案將針對四種可用的方言 "fb"、"qb"、"fblite" 和 "deprecated" 以不同的方式高亮顯示。有關如何選擇正確的方言,請參閱
ft-freebasic-plugin。
高亮顯示可透過以下變數進一步配置。
為了讓 Vim 識別不符合模式
fvwmrc 或
fvwm2rc 的 Fvwm 設定檔,您必須在您的 myfiletypes.vim 檔案中放入適用於您系統的額外模式。對於這些模式,您必須將變數 "b:fvwm_version" 設定為 Fvwm 的主要版本號,並將
'filetype' 選項設定為 fvwm。
例如,若要讓 Vim 將 /etc/X11/fvwm2/ 中的所有檔案識別為 Fvwm2 設定檔,請新增以下設定:
:au! BufNewFile,BufRead /etc/X11/fvwm2/* let b:fvwm_version = 2 |
\ set filetype=fvwm
GSP 頁面的預設著色樣式由
html.vim 定義,而 java 程式碼(在 java 標籤內或反引號之間的行內)的著色由
java.vim 定義。在
html.vim 中定義的以下 HTML 群組會被重新定義,以合併和高亮顯示行內 java 程式碼:
htmlString htmlValue htmlEndTag htmlTag htmlTagN
高亮顯示在您會看到行內 java 程式碼的大部分位置應該看起來不錯,但在某些特殊情況下可能不是。若要新增另一個您將擁有行內 java 程式碼且無法正確高亮顯示的 HTML 群組,只需從
html.vim 複製您想要的行,並將 gspJava 新增到 contains 子句中。
行內 java 的反引號會根據 htmlError 群組進行高亮顯示,以使其更容易看到。
Haskell 語法檔案支援純 Haskell 程式碼以及文學 Haskell 程式碼,後者包括 Bird 風格和 TeX 風格。Haskell 語法高亮也會高亮顯示 C 前置處理器指示詞。
如果您想要高亮顯示分隔符號字元(如果您有淺色背景,則非常有用),請將以下設定新增到您的 vimrc 中:
:let hs_highlight_delimiters = 1
若要將 True 和 False 視為關鍵字而非一般識別碼,請新增以下設定:
:let hs_highlight_boolean = 1
若也要將基本類型名稱視為關鍵字:
:let hs_highlight_types = 1
若要將更多相對常見的類型名稱視為關鍵字:
:let hs_highlight_more_types = 1
如果您想要高亮顯示偵錯函數的名稱,請在您的 vimrc 中放入以下設定:
:let hs_highlight_debug = 1
Haskell 語法高亮也會高亮顯示 C 前置處理器指示詞,並將以 # 開頭但不是有效指示詞的行標記為錯誤。這會干擾 Haskell 的運算子語法,因為它們可能以 # 開頭。如果您想要將這些高亮顯示為運算子而不是錯誤,請在您的 vimrc 中放入以下設定:
:let hs_allow_hash_operator = 1
對於文學 Haskell 程式碼的語法高亮,會嘗試自動判斷您的文學 Haskell 程式碼是否包含 TeX 標記,並相應地高亮 TeX 結構或完全不高亮。您可以透過在您的 vimrc 中加入以下設定來全域覆寫此行為:
:let lhs_markup = none
完全不進行高亮:
:let lhs_markup = tex
強制高亮功能總是嘗試高亮 TeX 標記。為了獲得更高的彈性,您也可以使用此變數的緩衝區區域版本,例如:
:let b:lhs_markup = tex
會強制特定緩衝區進行 TeX 高亮。必須在啟用緩衝區的語法高亮或載入檔案之前設定此選項。
HTML 檔案中標籤的著色方案如下。
開始標籤的 <> 與結束標籤的 </> 顏色不同。這是故意的!開始標籤使用 'Function' 顏色,而結束標籤使用 'Identifier' 顏色(請參閱 syntax.vim 以檢查這些顏色是如何為您定義的)。
已知的標籤名稱會以與 C 語言中的陳述式相同的顏色著色。未知的標籤名稱則會以與 <> 或 </> 相同的顏色著色,這樣可以輕鬆發現錯誤。
請注意,屬性(或引數)名稱也是如此。已知的屬性名稱會以與未知屬性名稱不同的顏色著色。
某些 HTML 標籤用於更改文字的渲染方式。以下標籤會被 html.vim 語法著色檔案識別,並更改一般文字的顯示方式:<B>
、<I>
、<U>
、<EM>
、<STRONG>
(<EM>
用作 <I>
的別名,而 <STRONG>
用作 <B>
的別名)、<H1>
- <H6>
、<HEAD>
、<TITLE>
和 <A>
,但僅當用作連結時 (也就是說,它必須包含 href,例如 <A href="somefile.html">)。
如果您想要變更此類文字的渲染方式,您必須重新定義下列語法群組:
htmlBold
htmlBoldUnderline
htmlBoldUnderlineItalic
htmlUnderline
htmlUnderlineItalic
htmlItalic
htmlTitle 用於標題
htmlH1 - htmlH6 用於標題
您也可以透過將以下行加入您的 vimrc 檔案來停用此渲染功能:
:let html_no_rendering=1
預設情況下,Vim 會將語法同步到第一個顯示行之前的 250 行。可以使用以下方式設定此行為:
:let html_minlines = 500
HTML 註解相當特殊(詳細資訊請參閱 HTML 參考文件),並且語法著色方案會高亮所有錯誤。但是,如果您偏好使用錯誤的樣式(以 <!-- 開頭並以 --> 結尾),則可以定義:
:let html_wrong_comments=1
嵌入在 HTML 文件中的 JavaScript 和 Visual Basic 會以「Special」高亮顯示,其中陳述式、註解、字串等等會以標準程式語言中的方式著色。請注意,目前僅支援 JavaScript 和 Visual Basic,尚未加入其他指令碼語言。
也會高亮顯示嵌入式和行內串聯樣式表 (CSS)。
市面上有數種 HTML 前處理器語言。撰寫 html.vim 的目的是使其能夠輕鬆包含這些語言。若要執行此操作,請將以下兩行加入該語言的語法著色檔案中(範例來自 asp.vim 檔案):
runtime! syntax/html.vim
syn cluster htmlPreproc add=asp
現在您只需要確保將所有包含前處理器語言的區域加入 htmlPreproc 群集中。
html-folding HTML 語法檔案提供開始和結束標籤之間的語法
折疊(請參閱
:syn-fold)。可以透過以下方式開啟此功能:
:let g:html_syntax_folding = 1
:set foldmethod=syntax
注意:語法折疊可能會顯著減慢語法高亮的速度,尤其是在大型檔案中。
HTML/OS 的著色方案如下:
預設情況下,函式和變數名稱的顏色相同,因為 VIM 沒有為函式和識別項指定不同的顏色。若要變更此設定(如果您希望函式名稱以不同的顏色辨識,則建議變更),您需要在您的 vimrc 中加入以下行:
:hi Function cterm=bold ctermfg=LightGray
當然,如果您選擇,ctermfg 可以是不同的顏色。
HTML/OS 遇到的另一個問題是,沒有特殊的檔案類型來表示它是包含 HTML/OS 程式碼的檔案。您可以透過開啟檔案並執行以下操作來開啟 HTML/OS 語法來變更此設定:
:set syntax=htmlos
最後,應注意,開始 HTML/OS 程式碼區塊的開始和結束字元分別可以是 << 或 [[ 和 >> 或 ]]。
Intel Itanium 64 組合語言的高亮顯示。請參閱
asm.vim 了解如何識別此檔案類型。
若要讓
*.inc
檔案被識別為 IA64,請將此設定加入您的 vimrc 檔案:
:let g:filetype_inc = "ia64"
Inform 高亮顯示包含 Inform 程式庫提供的符號,因為大多數程式都會大量使用它。如果您不希望高亮顯示程式庫符號,請將此設定加入您的 Vim 啟動檔:
:let inform_highlight_simple=1
預設情況下,假設 Inform 程式是以 Z-machine 為目標,並適當地高亮顯示 Z-machine 組合語言符號。如果您打算讓您的程式以 Glulx/Glk 環境為目標,您需要將此設定加入您的啟動序列:
:let inform_highlight_glulx=1
這會改為高亮顯示 Glulx 操作碼,並將 glk() 加入到高亮顯示的系統函式集中。
Inform 編譯器會在遇到某些過時的關鍵字時將它們標示為錯誤。這些關鍵字通常會被 Vim 高亮顯示為錯誤。若要防止此類錯誤高亮顯示,您必須將此設定加入您的啟動序列:
:let inform_suppress_obsolete=1
預設情況下,高亮顯示的語言功能符合編譯器版本 6.30 和程式庫版本 6.11。如果您使用的是較舊的 Inform 開發環境,您可能會想要將此設定加入您的啟動序列:
:let inform_highlight_old=1
IDL (介面定義語言) 檔案用於定義 RPC 呼叫。在 Microsoft 環境中,這也用於定義 COM 介面和呼叫。
IDL 的結構足夠簡單,可以採用完整的基於文法的做法,而不是使用一些啟發式方法。結果是龐大且有些重複,但似乎有效。
此處有一些 Microsoft 對於 idl 檔案的擴充功能。其中一些可以透過定義 idl_no_ms_extensions 來停用。
可以透過定義 idl_no_extensions 來停用更複雜的擴充功能。
idl_no_ms_extensions 停用一些 Microsoft 特定的擴充功能 idl_no_extensions 停用複雜的擴充功能 idlsyntax_showerror 顯示 IDL 錯誤(可能有些煩人,但很有幫助) idlsyntax_showerror_soft 預設為錯誤使用較柔和的顏色
java.vim 語法高亮檔案提供數個選項。
在 Java 1.0.2 中,不可能在括號內使用大括號,因此這會被標示為錯誤。自 Java 1.1 以來,這是可能的(使用匿名類別);因此,不再將其標示為錯誤。如果您偏好舊的方式,請將以下行放入您的 Vim 啟動檔案:
:let g:java_mark_braces_in_parens_as_errors = 1
java.lang
中宣告的所有(匯出的)公用類型都會自動匯入並可作為簡單名稱使用。若要高亮顯示它們,請使用:
:let g:java_highlight_java_lang_ids = 1
如果您在
https://www.fleiner.com/vim/download.html 下載 javaid.vim 指令碼,也可以高亮顯示大多數標準 Java 套件的類型。如果您只想高亮顯示特定套件(例如
java.io
)的類型,請使用以下設定:
:let g:java_highlight_java_io = 1
請檢查 javaid.vim 檔案,以取得所有支援套件的清單。
可以高亮顯示縮排函式宣告的標頭(以及 lambda 運算式和方法參考運算式的一部分),但這取決於您如何撰寫 Java 程式碼。可以辨識兩種格式:
1) 如果您撰寫的函式宣告始終以 Tab 鍵、空格鍵 ... 或八個空格字元縮排,您可能會想要設定以下其中一個選項:
:let g:java_highlight_functions = "indent"
:let g:java_highlight_functions = "indent1"
:let g:java_highlight_functions = "indent2"
:let g:java_highlight_functions = "indent3"
:let g:java_highlight_functions = "indent4"
:let g:java_highlight_functions = "indent5"
:let g:java_highlight_functions = "indent6"
:let g:java_highlight_functions = "indent7"
:let g:java_highlight_functions = "indent8"
請注意,就
'shiftwidth' 而言,這是最左側的縮排步驟。
2) 但是,如果您遵循 Java 關於如何命名函式和類型(關於大寫和小寫)的準則,並且有任何數量的縮排,您可能會想要設定:
:let g:java_highlight_functions = "style"
此外,您可以將 "g:java_highlight_functions" 的任何值與以下選項結合使用:
:let g:java_highlight_signature = 1
讓函式的名稱及其參數清單括號與其類型參數、傳回類型和形式參數明顯區分開來;以及讓 lambda 運算式的參數清單括號及其箭號與其形式參數或識別項明顯區分開來。
如果上述任何設定都不適用於您,但您仍然希望高亮顯示函式宣告的標頭,請修改目前的語法定義或撰寫新的語法定義。
較高階的函式類型很難用肉眼解析,因此統一調降其某些元件的色調可能很有價值。如果此類類型名稱符合 Java 命名準則,您可以使用以下設定來安排:
:let g:java_highlight_generics = 1
在 Java 1.1 中,函式
System.out.println()
和
System.err.println()
僅應用於偵錯。考慮在您的啟動檔案中加入以下定義:
:let g:java_highlight_debug = 1
將這些陳述式的大部分著色為
*Debug
偵錯陳述式,並進一步群組和連結它們的一些項目:
*Special
作為 DebugSpecial、
*String
作為 DebugString、
*Boolean
作為 DebugBoolean、
*Type
作為 DebugType,這些分別用於字串中出現的特殊字元、正確的字串、布林字面值和特殊執行個體參考(
super
、
this
、
null
)。
Javadoc 是一個程式,它會從 Java 程式檔案中取出特殊註解並建立 HTML 頁面。標準設定會以類似於 HTML 檔案的方式高亮顯示此 HTML 程式碼(請參閱
html.vim)。您甚至可以在此程式碼內加入 JavaScript 和 CSS(請參閱下文)。HTML 渲染和 Markdown 渲染的差異如下:1. 第一個句子(第一個句點
.
之前的所有字元,後面接著空白字元或行終止符,或第一個區塊標籤(例如
@param
、
@return
)之前的所有字元)會以 SpecialComment 特殊註解著色。2. 文字會以
*Comment
註解著色。3. HTML 註解會以
*Special
特殊符號著色。4. 標準 Javadoc 標籤(
@code
、
@see
等)會以
*Special
特殊符號著色,而它們的一些引數會以
*Function
函式名稱著色。若要針對 HTML 和 Markdown 關閉此功能,請將以下行加入您的啟動檔案:
:let g:java_ignore_javadoc = 1
或者,僅隱藏 HTML 註解或 Markdown 註解:
:let g:java_ignore_html = 1
:let g:java_ignore_markdown = 1
請參閱
ft-java-plugin 了解 Markdown 註解可用的其他支援。
如果您使用上述特殊的 Javadoc 註解高亮顯示,您也可以開啟 JavaScript、Visual Basic 指令碼和嵌入式 CSS (樣式表) 的特殊高亮顯示。只有當這些語言實際出現在 Javadoc 註解中時,這才有意義。要使用的變數是:
:let g:java_javascript = 1
:let g:java_css = 1
:let g:java_vb = 1
請注意,這三個變數會維護在 HTML 語法檔案中。
可以使用以下方式識別非 Javadoc 註解中的數字和字串:
:let g:java_comment_strings = 1
當
'foldmethod' 設定為 "syntax" 時,程式碼區塊和多行註解將會被摺疊。多行註解的第一行通常不會寫入任何文字,這使得使用預設的
'foldtext' 值時,摺疊後的 Javadoc 註解內容資訊較少;您可以選擇顯示以這種方式撰寫的註解的第二行內容,而其他情況則顯示第一行內容,使用方式如下:
:let g:java_foldtext_show_first_or_second_line = 1
可以使用以下設定將結尾的空白字元或 Tab 字元前的一連串空格字元標記為錯誤:
:let g:java_space_errors = 1
但也可以透過定義以下其中一種方式來抑制任何一種錯誤:
:let g:java_no_trail_space_error = 1
:let g:java_no_tab_space_error = 1
為了以不同顏色突顯巢狀括號,請為
javaParen
、
javaParen1
和
javaParen2
定義顏色。例如:
:hi link javaParen Comment
或
:hi javaParen ctermfg=blue guifg=#0000ff
某些修飾詞彼此不相容,例如
abstract
和
final
:syn list javaConceptKind
可以使用以下方式將它們作為一個群組,以不同於其他修飾詞的方式突顯:
:hi link javaConceptKind NonText
如果您在向後捲動時注意到突顯錯誤,而使用
CTRL-L
重新繪製時會修正這些錯誤,請嘗試將 "g:java_minlines" 變數設定為較大的數字
:let g:java_minlines = 50
這會讓語法同步從第一個顯示的行之前 50 行開始。預設值為 10。使用較大數字的缺點是重新繪製可能會變慢。
Java 平台的重要變更會以 JDK 增強提案 (JEP) 的形式逐步引入,這些提案可以針對發行版本實作,並作為其預覽功能提供。此功能可能需要數個 JEP 和數個發行週期才能整合到平台中,或從此工作中撤回。為了迎合早期採用者,Vim 中對於已實作的語法相關預覽功能提供選擇性的支援。您可以透過指定預覽功能編號列表來請求此功能,如下所示:
:let g:java_syntax_previews = [455, 476]
支援的 JEP 編號應從此表格中選取:
430
:字串範本 [JDK 21]
455
:模式、instanceof 和 switch 中的原始類型
476
:模組匯入宣告
請注意,一旦特定的預覽功能整合到 Java 平台中,其條目將會從表格中移除,並且相關的選用功能將會停止。
json 語法檔案預設提供具有隱藏支援的語法突顯。若要停用隱藏:
let g:vim_json_conceal = 0
若要停用錯誤的語法突顯:
let g:vim_json_warnings = 0
若要停用數字的獨立顏色,請將以下內容新增至您的 vimrc:
hi link jqNumber Normal
如果您希望引號具有不同於字串的突顯效果:
let g:jq_quote_highlight = 1
Lace (Eiffel 類別組合語言) 不區分大小寫,但樣式指南並非如此。如果您偏好不區分大小寫的突顯,只需在您的啟動檔案中定義 vim 變數 'lace_case_insensitive':
:let lace_case_insensitive=1
b:lf_shell_syntax
對於 lf 檔案管理員的設定檔 (lfrc),可以使用這些變數設定不同的
'include' 命令搜尋模式,來全域和逐緩衝區變更 shell 命令語法突顯: let g:lf_shell_syntax = "syntax/dosbatch.vim" let b:lf_shell_syntax = "syntax/zsh.vim"
這些變數預設為未設定。
Lex 使用暴力同步,因為 "^%%$" 區段分隔符號無法提供接下來區段的任何線索。因此,
:syn sync minlines=300
如果使用者遇到同步問題(例如在大型 lex 檔案中可能會發生),則使用者可以變更此值。
若要將已棄用的函式突顯為錯誤,請在您的 vimrc 中新增:
:let g:lifelines_deprecated = 1
lisp 語法突顯提供兩個選項:
g:lisp_instring : If it exists, then "(...)" strings are highlighted
as if the contents of the string were lisp.
Useful for AutoLisp.
g:lisp_rainbow : If it exists and is nonzero, then differing levels
of parenthesization will receive different
highlighting.
g:lisp_rainbow 選項為括號和反引號括號提供 10 個層級的個別色彩化。由於色彩化層級的數量,與非彩虹突顯不同,彩虹模式使用 ctermfg 和 guifg 指定其突顯,從而繞過使用標準突顯群組的一般色彩配置控制。實際使用的突顯取決於深色/淺色設定(請參閱
'bg' )。
lite 語法突顯有兩個選項。
如果您喜歡字串內的 SQL 語法突顯,請使用此選項:
:let lite_sql_query = 1
對於同步,minlines 預設為 100。如果您偏好其他值,可以將 "lite_minlines" 設定為您想要的值。範例:
:let lite_minlines = 200
LPC 代表一種簡單、記憶體效率高的語言:Lars Pensjö C。LPC 的檔案名稱通常為
*.c
。將這些檔案識別為 LPC 會打擾只撰寫 C 程式的使用者。如果您想在 Vim 中使用 LPC 語法,您應該在您的 vimrc 檔案中設定一個變數:
:let lpc_syntax_for_c = 1
如果對於某些特定的 C 或 LPC 檔案無法正確運作,請使用模型行。對於 LPC 檔案:
// vim:set ft=lpc:
對於被識別為 LPC 的 C 檔案:
// vim:set ft=c:
如果您不想設定變數,請在每個 LPC 檔案中使用模型行。
LPC 有數種實作方式,我們打算支援最廣泛使用的實作。此處預設的 LPC 語法適用於 MudOS 系列,對於 MudOS v22 及之前的版本,您應該關閉敏感修飾詞,這也會斷言 v22 之後的新 efuns 無效,當您使用最新版本的 MudOS 時,請勿設定此變數:
:let lpc_pre_v22 = 1
對於 LpMud 3.2 系列的 LPC:
:let lpc_compat_32 = 1
對於 LPC4 系列的 LPC:
:let lpc_use_lpc4_syntax = 1
對於 uLPC 系列的 LPC:uLPC 已開發為 Pike,因此您應該改用 Pike 語法,並且您的原始碼檔案名稱應為
*.pike
Lua 語法檔案可用於 4.0、5.0、5.1 和 5.2 版本 (5.2 為預設值)。您可以使用全域變數 lua_version 和 lua_subversion 來選擇其中一個版本。例如,若要啟動 Lua 5.1 語法突顯,請像這樣設定變數:
:let lua_version = 5
:let lua_subversion = 1
Vim 會突顯電子郵件的所有標準元素(標頭、簽名、引用的文字和 URL / 電子郵件地址)。為了符合標準慣例,簽名從僅包含 "--" 的行開始,後接可選的空白字元,並以換行符號結束。
Vim 將以 ']'、'}'、'|'、'>' 或後接 '>' 的單字開頭的行視為引用的文字。但是,Vim 僅在文字以 '>' (可選後接一個空格) 引用的情況下,才會突顯引用的文字中的標頭和簽名。
預設情況下,mail.vim 會將語法同步到第一個顯示的行之前的 100 行。如果您使用的機器速度較慢,並且通常處理標頭較短的電子郵件,則可以將此值變更為較小的值:
:let mail_minlines = 30
在 makefile 中,命令通常會被突顯,以便您輕鬆發現錯誤。但是,對於您來說,這種著色可能太多了。您可以使用以下設定關閉此功能:
:let make_no_commands = 1
預設情況下也會突顯註解。您可以使用以下設定關閉此功能:
:let make_no_comments = 1
Microsoft Makefile 以不同的方式處理變數展開和註解(反斜線不用於跳脫)。如果您因此看到任何錯誤的突顯,可以嘗試此設定:
:let make_microsoft = 1
Waterloo Maple Inc 的 Maple V 支援符號代數。該語言支援許多可由使用者選擇性載入的函式套件。使用者可以自行決定突顯 Maple V 第 4 版中提供的標準套件函式。使用者可以將以下內容放在他們的 vimrc 檔案中:
:let mvpkg_all= 1
以突顯所有套件函式,或者使用者可以從下表中選擇任何子集,並將該變數設定為 1(也在他們的 vimrc 檔案中,在取得 $VIMRUNTIME/syntax/syntax.vim 之前)。
Maple V 套件函式選取器表
mv_DEtools mv_genfunc mv_networks mv_process
mv_Galois mv_geometry mv_numapprox mv_simplex
mv_GaussInt mv_grobner mv_numtheory mv_stats
mv_LREtools mv_group mv_orthopoly mv_student
mv_combinat mv_inttrans mv_padic mv_sumtools
mv_combstruct mv_liesymm mv_plots mv_tensor
mv_difforms mv_linalg mv_plottools mv_totorder
mv_finance mv_logic mv_powseries
g:markdown_fenced_languages g:markdown_syntax_conceal
如果您有很長的區域,可能會出現錯誤的突顯。為了減緩顯示速度,您可以讓引擎回頭查看更遠的地方,以便在區域開始時同步,例如 500 行(預設值為 50):
:let g:markdown_minlines = 500
如果您想在您的 markdown 文件中啟用分隔程式碼區塊語法突顯,可以像這樣啟用:
:let g:markdown_fenced_languages = ['html', 'python', 'bash=sh']
若要停用 markdown 語法隱藏,請將以下內容新增至您的 vimrc:
:let g:markdown_syntax_conceal = 0
除非您的 vimrc 中有以下內容,否則空的
*.m
檔案會自動被視為 Matlab 檔案:
let filetype_m = "mma"
預設情況下,語法突顯包含基本 HTML 標籤,如樣式和標頭
html.vim。為了進行嚴格的 Mediawiki 語法突顯:
let g:html_no_rendering = 1
如果需要 HTML 突顯,可以使用以下方式進行基於終端的文字格式設定,例如粗體和斜體:
let g:html_style_rendering = 1
Vim 將會識別帶有方言標籤的註解,以自動選擇給定的方言。
方言標籤註解的語法為:
taggedComment :=
'(*!' dialectTag '*)'
;
dialectTag :=
m2pim | m2iso | m2r10
;
reserved words
m2pim = 'm2pim', m2iso = 'm2iso', m2r10 = 'm2r10'
如果方言標籤註解出現在原始檔的前 200 行內,則 Vim 會識別它。僅會識別第一個此類註解,任何其他方言標籤註解都會被忽略。
範例:
DEFINITION MODULE FooLib; (*!m2pim*)
...
當無法從 Modula-2 檔案的內容判斷方言時,變數 g:modula2_default_dialect 會設定預設的 Modula-2 方言:如果定義且設定為 'm2pim',則預設方言為 PIM。
範例:
let g:modula2_default_dialect = 'm2pim'
透過下列變數,可以進一步針對每個方言配置語法高亮顯示。
如果您在表達式中使用 C 樣式的註解,並且發現它會破壞您的語法高亮顯示,您可能需要針對 C 樣式的註解使用擴展(較慢!)的匹配方式
:let moo_extended_cstyle_comments = 1
要停用字串內代名詞替換模式的語法高亮顯示
:let moo_no_pronoun_sub = 1
要停用字串內正規表示式運算子 '%|',以及匹配的 '%(' 和 '%)' 的語法高亮顯示
:let moo_no_regexp = 1
可以識別未匹配的雙引號,並將其高亮顯示為錯誤
:let moo_unmatched_quotes = 1
要高亮顯示內建屬性(.name、.location、.programmer 等)
:let moo_builtin_properties = 1
可以識別未知的內建函式,並將其高亮顯示為錯誤。如果您使用此選項,請將您自己的擴充新增至 mooKnownBuiltinFunction 群組。要啟用此選項
:let moo_unknown_builtin_functions = 1
將 sprintf() 新增至已知內建函式清單的範例
:syn keyword mooKnownBuiltinFunction sprintf contained
msql 語法高亮顯示有兩個選項。
如果您喜歡字串內的 SQL 語法突顯,請使用此選項:
:let msql_sql_query = 1
對於同步,minlines 預設為 100。如果您偏好其他值,可以將 "msql_minlines" 設定為您想要的值。範例
:let msql_minlines = 200
要停用預設的 NeoMutt 記錄顏色
:let g:neolog_disable_default_colors = 1
N1QL 是一種類似 SQL 的宣告式語言,用於操作 Couchbase Server 資料庫中的 JSON 文件。
Vim 語法高亮顯示 N1QL 語句、關鍵字、運算子、類型、註解和特殊值。Vim 會忽略特定於 SQL 或其許多方言的語法元素,例如 COLUMN 或 CHAR,這些元素在 N1QL 中不存在。
NCF 語法高亮顯示有一個選項。
如果您希望將 (ncf.vim) 無法識別的語句高亮顯示為錯誤,請使用此選項
:let ncf_highlight_unknowns = 1
如果您不想高亮顯示這些錯誤,請保持未設定狀態。
nroff 語法檔案可直接使用 AT&T n/troff。您需要先啟用語法檔案中包含的 GNU groff 額外功能,才能使用它們。
例如,Linux 和 BSD 發行版使用 groff 作為其預設的文字處理套件。為了啟用 groff 的額外語法高亮顯示功能,請安排將檔案識別為 groff(請參閱
ft-groff-syntax),或將以下選項新增至您的啟動檔案
:let nroff_is_groff = 1
Groff 與您可能仍在 Solaris 中找到的舊 AT&T n/troff 不同。Groff 巨集和請求名稱可以超過 2 個字元,並且語言基本元素也有擴充功能。例如,在 AT&T troff 中,您可以使用請求 \(yr 以 2 位數字存取年份。在 groff 中,您可以使用相同的請求(為了相容性而識別),也可以使用 groff 的原生語法 \[yr]。此外,您可以直接使用 4 位數年份:\[year]。巨集請求的長度可以超過 2 個字元,例如,GNU mm 接受請求 ".VERBON" 和 ".VERBOFF" 以建立逐字環境。
為了獲得 g/troff 可以為您提供的最佳格式化輸出,您應該遵循一些關於間距和標點符號的簡單規則。
1. 不要在行尾留下空白。
2. 在句號、驚嘆號等句子結尾標點符號之後,僅留一個空格。
3. 由於以下原因,最好在所有句號標記後跟一個歸位符號。
這些不尋常提示背後的原因是,如果您不遵循上述規則,g/n/troff 的換行演算法很容易被打亂。
與 TeX 不同,troff 逐行填充文字,而不是逐段填充,此外,它沒有膠水或拉伸的概念,所有水平和垂直空間輸入都將按原樣輸出。
因此,您應該注意不要在句子之間使用比您希望在最終文件中使用的更多空格。因此,常見的做法是在所有標點符號後立即插入歸位符號。如果您希望在最終處理的輸出中獲得「均勻」的文字,則需要在輸入文字中保持規則的間距。要將尾隨空格和標點符號後兩個或多個空格標記為錯誤,請使用
:let nroff_space_errors = 1
另一種偵測額外間距和其他會干擾檔案正確排版的錯誤的技術,是在您的組態檔案中為語法群組「nroffDefinition」和「nroffDefSpecial」定義醒目的高亮顯示定義。例如
hi def nroffDefinition cterm=italic gui=reverse
hi def nroffDefSpecial cterm=italic,bold gui=reverse,bold
如果您想像使用章節標記一樣輕鬆地瀏覽原始碼檔案中的前置處理器項目,您可以在 vimrc 檔案中啟用以下選項
let b:preprocs_as_sections = 1
此外,語法檔案還為 ms 套件中的擴充段落巨集 (.XP) 新增了一個額外的段落標記。
最後,還有一個
groff.vim 語法檔案,可用於在檔案基礎上或預設全局啟用 groff 語法高亮顯示。
OCaml 語法檔案處理具有以下字首的檔案:.ml、.mli、.mll 和 .mly。透過設定以下變數
:let ocaml_revised = 1
您可以從標準 OCaml 語法切換為 camlp4 前置處理器支援的修訂語法。設定變數
:let ocaml_noend_error = 1
可防止將 "end" 高亮顯示為錯誤,當原始碼包含 Vim 不再同步的非常長的結構時,這很有用。
預設情況下,markdown 檔案將被偵測為檔案類型 "markdown"。或者,您可能希望將它們偵測為檔案類型 "pandoc"。若要這樣做,請設定
g:filetype_md 變數
:let g:filetype_md = 'pandoc'
pandoc 語法外掛程式使用
隱藏 來進行美觀的高亮顯示。預設值為 1
:let g:pandoc#syntax#conceal#use = 1
若要指定不應隱藏的元素,請設定以下變數
:let g:pandoc#syntax#conceal#blacklist = []
這是可以在此處使用的規則清單
titleblock
image
block
subscript
superscript
strikeout
atx
codeblock_start
codeblock_delim
footnote
definition
list
newline
dashes
ellipses
quotes
inlinecode
inlinemath
您可以自訂隱藏的方式。例如,如果您偏好使用
*
符號標記註腳
:let g:pandoc#syntax#conceal#cchar_overrides = {"footnote" : "*"}
若要隱藏連結中的 URL,請使用
:let g:pandoc#syntax#conceal#urls = 1
防止高亮顯示特定的程式碼區塊類型,使其保持為 Normal。程式碼區塊類型包括定義區塊內的程式碼區塊的「definition」,以及分隔程式碼區塊的「delimited」。預設值 = []
:let g:pandoc#syntax#codeblocks#ignore = ['definition']
針對指定了語言的分隔程式碼區塊使用內嵌高亮顯示。預設值 = 1
:let g:pandoc#syntax#codeblocks#embeds#use = 1
指定要高亮顯示內嵌的語言和使用的語法檔案。這是語言名稱的清單。當 pandoc 和 vim 使用的語言不匹配時,您可以使用「PANDOC=VIM」語法。例如
:let g:pandoc#syntax#codeblocks#embeds#langs = ["ruby", "bash=sh"]
在強調中使用斜體和粗體。預設值 = 1
:let g:pandoc#syntax#style#emphases = 1
"0" 會將 "block" 新增至 g:pandoc#syntax#conceal#blacklist,因為否則您無法分辨樣式套用在哪裡。
新增底線、下標、上標和刪除線文字樣式。預設值 = 1
:let g:pandoc#syntax#style#underline_special = 1
偵測並高亮顯示定義清單。停用此功能可以提高效能。預設值 = 1(即,預設啟用)
:let g:pandoc#syntax#style#use_definition_lists = 1
pandoc 語法腳本也隨附以下命令
:PandocHighlight LANG
啟用程式碼區塊中語言 LANG 的內嵌高亮顯示。使用 g:pandoc#syntax#codeblocks#embeds#langs 中的項目的語法。
:PandocUnhighlight LANG
停用程式碼區塊中語言 LANG 的內嵌高亮顯示。
PApp 語法檔案處理 .papp 檔案,以及在較小程度上處理 .pxml 和 .pxsl 檔案,這些檔案都是使用 xml 作為最上層檔案格式的 perl/xml/html/其他混合檔案。預設情況下,phtml 或 pxml 區段內的所有內容都視為具有內嵌前置處理器命令的字串。如果您設定變數
:let papp_include_html=1
在您的啟動檔案中,它將嘗試在高亮顯示 phtml 區段內的 html 程式碼,但這相對較慢,而且色彩太豐富而無法有意義地編輯。;)
符合 "*.p" 的檔案可能是 Progress 或 Pascal,符合 "*.pp" 的檔案可能是 Puppet 或 Pascal。如果自動偵測對您不起作用,或者您只編輯 Pascal 檔案,請在您的啟動 vimrc 中使用此選項
:let filetype_p = "pascal"
:let filetype_pp = "pascal"
Pascal 語法檔案已擴充,以考慮 Turbo Pascal、Free Pascal Compiler 和 GNU Pascal Compiler 提供的一些擴充功能。也支援 Delphi 關鍵字。預設情況下,啟用 Turbo Pascal 7.0 功能。如果您偏好使用標準 Pascal 關鍵字,請將以下行新增至您的啟動檔案
:let pascal_traditional=1
若要開啟 Delphi 特定結構 (例如單行註解、關鍵字等)
:let pascal_delphi=1
pascal_symbol_operator 選項控制是否使用運算子色彩顯示符號運算子,例如 +、
*
、.. 等。若要將符號運算子著色,請將以下行新增至您的啟動檔案
:let pascal_symbol_operator=1
預設情況下會高亮顯示某些函式。若要關閉此功能
:let pascal_no_functions=1
此外,某些編譯器有特定的變數。除了 pascal_delphi 之外,還有 pascal_gpc 和 pascal_fpc。預設擴充功能嘗試與 Turbo Pascal 匹配。
:let pascal_gpc=1
或
:let pascal_fpc=1
若要確保在單行上定義字串,您可以定義 pascal_one_line_string 變數。
:let pascal_one_line_string=1
如果您不喜歡
<Tab>
字元,可以設定 pascal_no_tabs 變數。Tab 將高亮顯示為錯誤。
:let pascal_no_tabs=1
perl 語法高亮顯示有許多可能的選項。
現在預設會開啟內嵌 POD 高亮顯示。如果您不希望在 Perl 檔案內嵌入 POD 的高亮顯示增加複雜性,您可以將 'perl_include_pod' 選項設定為 0
:let perl_include_pod = 0
為了降低語法分析的複雜度(並提升效能),你可以關閉變數名稱和內容分析中的兩個元素。為了讓套件參考在變數和函數名稱中的處理方式,與名稱的其他部分沒有區別(例如 '$PkgName::VarName' 中的 'PkgName::')
:let perl_no_scope_in_variables = 1
(在 Vim 6.x 中,情況正好相反:「perl_want_scope_in_variables」啟用此功能。)
如果你不希望分析像
@{${"foo"}}
這樣的複雜內容
:let perl_no_extended_vars = 1
(在 Vim 6.x 中,情況正好相反:「perl_extended_vars」啟用此功能。)
字串的著色可以更改。預設情況下,字串和 qq 相關語法將會像第一行一樣被高亮顯示。如果你設定變數 perl_string_as_statement,則會像第二行一樣被高亮顯示。
"hello world!"; qq|hello world|; ^^^^^^^^^^^^^^NN^^^^^^^^^^^^^^^N (未設定 perl_string_as_statement) S^^^^^^^^^^^^SNNSSS^^^^^^^^^^^SN (設定 perl_string_as_statement)
(^ = perlString,S = perlStatement,N = 完全沒有)
同步有 3 個選項。前兩個選項會關閉一些同步觸發,只有在同步無法正常工作時才需要使用。如果當你捲動時,整個畫面突然完全變色,那麼你應該嘗試關閉其中一個選項。如果你可以找出導致錯誤的行,請通知開發人員。
一個選項觸發於 "^\s*sub\s*",另一個選項則觸發於 "^\[$@%]",大致如此。
:let perl_no_sync_on_sub
:let perl_no_sync_on_global_var
在下方你可以設定 Vim 在嘗試語法高亮時,應該尋找起始點的最大距離。
:let perl_sync_dist = 100
如果你想在 Perl 中使用摺疊功能,請設定 perl_fold
:let perl_fold = 1
如果你也想摺疊 if 語句等區塊,請設定以下選項
:let perl_fold_blocks = 1
如果設定了 'perl_fold',子程式預設會被摺疊。如果你不希望這樣,可以設定 'perl_nofold_subs'
:let perl_nofold_subs = 1
匿名子程式預設不會被摺疊;你可以透過 'perl_fold_anonymous_subs' 啟用它們的摺疊功能
:let perl_fold_anonymous_subs = 1
如果設定了 'perl_fold',套件預設也會被摺疊。若要停用此行為,請設定 'perl_nofold_packages'
:let perl_nofold_packages = 1
PHP3 和 PHP4
php.vim php3.vim ft-php-syntax ft-php3-syntax
注意: 之前它被稱為「php3」,但由於現在也支援 php4,所以已重新命名為「php」
以下是 php 語法高亮的一些選項。
如果你喜歡字串內的 SQL 語法高亮
let php_sql_query = 1
用於高亮顯示 Baselib 方法
let php_baselib = 1
啟用字串內的 HTML 語法高亮
let php_htmlInStrings = 1
使用舊的色彩風格
let php_oldStyle = 1
啟用高亮顯示 ASP 風格的短標籤
let php_asp_tags = 1
停用短標籤
let php_noShortTags = 1
用於高亮顯示括號錯誤 ] 或 )
let php_parent_error_close = 1
如果存在沒有結尾的開括號 ( 或 [,則跳過 php 結束標籤
let php_parent_error_open = 1
啟用類別和函數的摺疊
let php_folding = 1
選擇同步方法
let php_sync_method = x
x = -1 表示透過搜尋同步(預設),x > 0 表示至少向後同步 x 行,x = 0 表示從頭開始同步。
TeX 是一種排版語言,而 plaintex 是 TeX 的「plain」變體的檔案類型。如果你不希望你的
*.tex
檔案被識別為 plain TeX,請參閱
ft-tex-plugin。
此語法檔案具有以下選項
let g:plaintex_delimiters = 1
如果你想高亮顯示方括號 "[]" 和大括號 "{}"。
PPWizard 是 HTML 和 OS/2 INF 檔案的預處理器
此語法檔案具有以下選項
ppwiz_highlight_defs:決定 PPWizard 定義的高亮顯示模式。可能的值為
ppwiz_highlight_defs = 1:PPWizard #define 陳述式保留其內容的顏色(例如 PPWizard 巨集和變數)。
ppwiz_highlight_defs = 2:預處理器 #define 和 #evaluate 陳述式以單一顏色顯示,但行接續符號除外。
ppwiz_highlight_defs 的預設設定為 1。
ppwiz_with_html:如果值為 1(預設),則高亮顯示文字 HTML 程式碼;如果為 0,則將 HTML 程式碼視為一般文字。
phtml 語法高亮有兩個選項。
如果您喜歡字串內的 SQL 語法突顯,請使用此選項:
:let phtml_sql_query = 1
為了同步,minlines 預設為 100。如果你偏好其他值,可以將 "phtml_minlines" 設定為你想要的值。範例
:let phtml_minlines = 200
關於高亮顯示 PostScript,有幾個選項。
首先是要高亮顯示哪個版本的 PostScript 語言。目前定義了三個語言版本或級別。級別 1 是原始和基礎版本,包含級別 2 發布之前的所有擴充功能。級別 2 是最常見的版本,包含級別 3 發布之前的一組擴充功能。級別 3 是目前支援的最高級別。你可以透過如下定義 postscr_level 變數來選擇要高亮顯示的 PostScript 語言級別
:let postscr_level=2
如果未定義此變數,則預設為 2(級別 2),因為這是目前最流行的版本。
注意:並非所有 PS 解譯器都支援特定語言級別的所有語言功能。特別是 PS 檔案開頭的 %!PS-Adobe-3.0 並不表示目前的 PostScript 是級別 3 PostScript!
如果你正在使用 Display PostScript,你可以透過如下定義 postscr_display 變數來包含 Display PS 語言功能的高亮顯示
:let postscr_display=1
如果你正在使用 Ghostscript,你可以透過如下定義變數 postscr_ghostscript 來包含 Ghostscript 特定語言功能的高亮顯示
:let postscr_ghostscript=1
PostScript 是一種龐大的語言,具有許多預定義元素。雖然高亮顯示所有這些元素很有用,但在較慢的機器上,這可能會導致 Vim 變慢。為了對機器友善,預設情況下不會高亮顯示字型名稱和字元編碼。除非你明確使用其中一個,否則應該沒問題。如果你希望它們被高亮顯示,則應設定以下一個或兩個變數
:let postscr_fonts=1
:let postscr_encodings=1
and、or 和 not 的高亮顯示有一種樣式選項。在 PostScript 中,這些運算子的函數取決於它們的運算元類型 - 如果運算元是布林值,則它們是邏輯運算子,如果它們是整數,則它們是二進位運算子。由於二進位和邏輯運算子可以被不同地高亮顯示,因此必須以某種方式高亮顯示。預設情況下,它們被視為邏輯運算子。可以透過如下定義變數 postscr_andornot_binary 將它們高亮顯示為二進位運算子
:let postscr_andornot_binary=1
此語法檔案適用於 printcap 和 termcap 資料庫。
例如,若要讓 Vim 將 /etc/termcaps/ 中的所有檔案識別為 termcap 檔案,請新增以下內容
:au BufNewFile,BufRead /etc/termcaps/* let b:ptcap_type = "term" |
\ set filetype=ptcap
如果你在向後捲動時發現高亮顯示錯誤,並且使用
CTRL-L
重繪時會修正這些錯誤,請嘗試將 "ptcap_minlines" 內部變數設定為更大的數字
:let ptcap_minlines = 50
(預設為 20 行。)
符合 "*.w" 的檔案可能是 Progress 或 cweb。如果自動偵測對你不起作用,或者你完全不編輯 cweb,請在你的啟動 vimrc 中使用此程式碼
:let filetype_w = "progress"
對 "*.i"(可能是組合語言)和 "*.p"(可能是 Pascal)也是如此。如果你不使用組合語言和 Pascal,請使用此程式碼
:let filetype_i = "progress"
:let filetype_p = "progress"
有六個選項可以控制 Python 語法高亮顯示。
用於高亮顯示數字
:let python_no_number_highlight = 1
用於高亮顯示內建函數
:let python_no_builtin_highlight = 1
用於高亮顯示標準例外
:let python_no_exception_highlight = 1
用於高亮顯示 doctest 及其中的程式碼
:let python_no_doctest_highlight = 1
或
:let python_no_doctest_code_highlight = 1
第一個選項暗示第二個選項。
用於高亮顯示尾隨空白和空格與 tab 的混合
:let python_space_error_highlight = 1
如果你想要所有可能的 Python 高亮顯示
:let python_highlight_all = 1
這與設定 python_space_error_highlight 並取消設定所有其他選項的效果相同。
如果你使用 Python 2 或跨越程式碼(與 Python 2 和 3 相容),你可以強制使用支援 Python 2 和高達 Python 3.5 的舊語法檔案。
:let python_use_python2_syntax = 1
此選項將排除所有現代 Python 3.6 或更高版本的功能。
注意:只有這些選項的存在才重要,而不是它們的值。你可以將上面的 1 替換為任何值。
Quake 語法定義應適用於大多數基於其中一個 Quake 引擎的 FPS(第一人稱射擊遊戲)。但是,三個遊戲(Quake、Quake 2 和 Quake 3 Arena)之間的命令名稱略有不同,因此語法定義會檢查三個全域變數的存在,以允許使用者指定檔案中的合法命令。可以設定這三個變數以產生以下效果
設定為僅高亮顯示 Quake 中可用的命令
:let quake_is_quake1 = 1
設定為僅高亮顯示 Quake 2 中可用的命令
:let quake_is_quake2 = 1
設定為僅高亮顯示 Quake 3 Arena 中可用的命令
:let quake_is_quake3 = 1
這三個變數的任何組合都是合法的,但可能會高亮顯示比遊戲實際可用的命令更多的命令。
R 程式碼的語法高亮分析從向後 40 行開始,但你可以在你的
vimrc 中設定不同的值。範例
let r_syntax_minlines = 60
你也可以關閉 ROxygen 的語法高亮顯示
let r_syntax_hl_roxygen = 0
啟用以圓括號、方括號和大括號分隔的程式碼的摺疊
let r_syntax_folding = 1
並將所有後面接開括號的關鍵字高亮顯示為函數
let r_syntax_fun_pattern = 1
R MARKDOWN
rmd.vim ft-rmd-syntax
若要停用 YAML 標頭的語法高亮顯示,請新增至你的
vimrclet rmd_syn_hl_yaml = 0
若要停用引文索引鍵的語法高亮顯示
let rmd_syn_hl_citations = 0
若要高亮顯示 knitr 區塊標頭中的 R 程式碼
let rmd_syn_hl_chunk = 1
預設情況下,R 程式碼區塊將依照 R 語言的規則高亮顯示。此外,每當儲存緩衝區時,Vim 會掃描緩衝區,並在高亮顯示新區塊中存在的其他語言。儲存緩衝區時也會自動識別並高亮顯示 LaTeX 程式碼。此行為可透過變數
rmd_dynamic_fenced_languages
和
rmd_include_latex
控制,其有效值為
let rmd_dynamic_fenced_languages = 0 " No autodetection of languages
let rmd_dynamic_fenced_languages = 1 " Autodetection of languages
let rmd_include_latex = 0 " Don't highlight LaTeX code
let rmd_include_latex = 1 " Autodetect LaTeX code
let rmd_include_latex = 2 " Always include LaTeX highlighting
如果
rmd_dynamic_fenced_languages
的值為 0,您仍然可以設定程式碼區塊應正確高亮顯示的語言列表,如下例所示。
let rmd_fenced_languages = ['r', 'python']
R RESTRUCTURED TEXT
rrst.vim ft-rrst-syntax
若要在 knitr 區塊標頭中高亮顯示 R 程式碼,請將以下內容新增至您的
vimrc:
let rrst_syn_hl_chunk = 1
Rasi 代表 Rofi Advanced Style Information。它被 rofi 程式用來設定搜尋視窗的樣式。該語言深受 CSS 樣式表的啟發。副檔名為 .rasi 的檔案會被識別為 rasi 檔案。
readline 函式庫主要由 BASH shell 使用,它會新增許多指令和選項。若要高亮顯示這些項目,您可以將以下內容新增至您的
vimrc,或在載入具有 readline 語法的檔案之前,直接在命令列中輸入。
let readline_has_bash = 1
這會為 BASH(2.05a 及更高版本,以及部分早期版本)新增的指令加上高亮顯示。
Rego 是由 Styra 開發的查詢語言。它主要用作 Kubernetes 的原則語言,但幾乎可以應用於任何事物。副檔名為 .rego 的檔案會被識別為 rego 檔案。
文件中程式碼區塊的語法高亮顯示功能已啟用,適用於選定的檔案類型。請參閱 $VIMRUNTIME/syntax/rst.vim 以取得預設語法列表。
若要設定使用者定義的程式碼區塊語法高亮顯示列表:
let rst_syntax_code_list = ['vim', 'lisp', ...]
若要將多個程式碼區塊類型指派給單一語法,請將
rst_syntax_code_list
定義為一個對應。
let rst_syntax_code_list = {
\ 'cpp': ['cpp', 'c++'],
\ 'bash': ['bash', 'sh'],
...
\ }
若要對強調文字使用顏色高亮顯示:
let rst_use_emphasis_colors = 1
若要啟用區段的摺疊:
let rst_fold_enabled = 1
請注意,摺疊可能會在某些平台上導致效能問題。
如果您注意到向後捲動時出現高亮顯示錯誤,並且在以
CTRL-L
重新繪製時會修正,請嘗試將 "rexx_minlines" 內部變數設定為較大的數字。
:let rexx_minlines = 50
這會讓語法同步從第一個顯示的行之前 50 行開始。預設值為 10。使用較大數字的缺點是重新繪製可能會變慢。
Vim 會嘗試猜測 ".r" 檔案的類型。如果無法偵測(從註解行),則預設為 "r"。若要將預設設為 rexx,請將此行新增至您的 vimrc:
g:filetype_r
:let g:filetype_r = "r"
可以透過定義 "ruby_operators" 來高亮顯示運算子。
:let ruby_operators = 1
可以透過定義 "ruby_space_errors" 來高亮顯示空白錯誤。
:let ruby_space_errors = 1
這會將尾隨空白和以空格字元開頭的 Tab 鍵高亮顯示為錯誤。可以透過定義 "ruby_no_trail_space_error" 和 "ruby_no_tab_space_error" 來調整,這將分別忽略尾隨空白和空格後的 Tab 鍵。
可以透過定義 "ruby_fold" 來啟用摺疊。
:let ruby_fold = 1
這會將
'foldmethod' 的值在本機設定為目前緩衝區或視窗的 "syntax",這會在編輯 Ruby 檔案類型時啟用基於語法的摺疊。
預設摺疊相當詳細,也就是說,像 "if"、"do"、"%w[]" 這樣的小語法單位可能會建立對應的摺疊層級。
您可以設定 "ruby_foldable_groups" 來限制哪些群組可摺疊。
:let ruby_foldable_groups = 'if case %'
此值是以空格分隔的關鍵字列表。
關鍵字含義
-------- -------------------------------------
ALL 大多數區塊語法(預設) NONE 無 if "if" 或 "unless" 區塊 def "def" 區塊 class "class" 區塊 module "module" 區塊 do "do" 區塊 begin "begin" 區塊 case "case" 區塊 for "for"、"while"、"until" 迴圈 { 大括號區塊或雜湊字面值 [ 陣列字面值 % 以 "%" 符號表示的字面值,例如:%w(STRING)、%!STRING! / 正規表示式字串 字串和 shell 命令輸出(以 '、" 括住) : 符號 # 多行註解 << 此處文件 __END__ "__END__" 指令後的原始程式碼
預設情況下,"end" 關鍵字會根據它關閉的區塊的開頭陳述式著色。雖然此功能很有用,但可能會很耗費資源;如果您遇到重新繪製緩慢的問題(或者您使用的終端機的色彩支援不佳),您可能需要透過定義 "ruby_no_expensive" 變數來關閉此功能。
:let ruby_no_expensive = 1
在這種情況下,所有控制關鍵字都會使用相同的顏色。
如果您確實想要啟用此功能,但注意到向後捲動時出現高亮顯示錯誤,並且在以
CTRL-L
重新繪製時會修正,請嘗試將 "ruby_minlines" 變數設定為大於 50 的值。
:let ruby_minlines = 100
理想情況下,此值應該是一個足夠大的行數,足以包含您最大的類別或模組。
如果您定義 "ruby_spellcheck_strings",Ruby 語法將會執行字串的拼字檢查。
:let ruby_spellcheck_strings = 1
預設情況下,僅會高亮顯示 R7RS 關鍵字,並正確縮排。
scheme.vim 也支援 CHICKEN Scheme->C 編譯器的擴充功能。如果需要,請定義 b:is_chicken 或 g:is_chicken。
SDL 高亮顯示可能遺漏了一些關鍵字,但 SDL 的關鍵字太多了,幾乎不可能全部處理。
新標準 SDL-2000 指定所有識別碼區分大小寫(以前不是這樣),並且所有關鍵字都可以完全小寫或完全大寫。若要讓高亮顯示反映這一點,您可以設定以下變數:
:let sdl_2000=1
這也會設定許多新的關鍵字。如果您想要停用舊的關鍵字(這可能是個好主意),請使用:
:let SDL_no_96=1
縮排可能也不完整,但目前我對自己專案的縮排方式非常滿意。
若要讓 Tab 鍵與一般空白區隔開來(透過在 Tab 鍵上使用 Todo 高亮顯示來完成),請將 "g:sed_highlight_tabs" 定義為:
:let g:sed_highlight_tabs = 1
在 vimrc 檔案中。(此特殊高亮顯示僅適用於搜尋模式、取代文字、位址或 Append/Change/Insert 命令所包含的文字中的 Tab 鍵。)如果啟用此選項,最好也將 Tab 鍵寬度設定為一個字元;這樣做,您就可以輕鬆計算字串中的 Tab 鍵數量。
GNU sed 允許在同一行的文字後方加入註解。BSD sed 只允許在 "#" 是該行的第一個字元時使用註解。若要強制執行 BSD 風格的註解,也就是將行尾註解標示為錯誤,請使用:
:let g:sed_dialect = "bsd"
請注意,GNU sed 和 BSD sed 之間還有其他差異,這些差異(目前)不受此設定影響。
錯誤
轉換命令 (y) 的處理方式與取代命令完全相同。這表示,就此語法檔案而言,轉換命令接受與取代命令相同的旗標,這是錯誤的。(轉換命令不接受旗標。)我容忍這個錯誤,因為所涉及的命令需要非常複雜的處理(95 個模式,每個合理的模式分隔符號各一個)。
SGML 檔案中標籤的著色方式如下。
起始標籤的 <> 與結束標籤的 </> 的顏色不同。這是故意的!對於起始標籤,會使用「函式」顏色,而對於結束標籤,則會使用「類型」顏色(請參閱 syntax.vim 以檢查這些顏色是如何為您定義的)。
已知的標籤名稱會以與 C 語言中的陳述式相同的方式著色。未知的標籤名稱則不會著色,這使得偵測錯誤變得容易。
請注意,屬性(或引數)名稱也是如此。已知的屬性名稱會以與未知屬性名稱不同的顏色著色。
某些 SGML 標籤用於變更文字的呈現方式。sgml.vim 語法著色檔案會辨識以下標籤,並變更顯示一般文字的方式:<varname>
<emphasis>
<command>
<function>
<literal>
<replaceable>
<ulink>
和 <link>
。
如果您想要變更此類文字的渲染方式,您必須重新定義下列語法群組:
sgmlBold
sgmlBoldItalic
sgmlUnderline
sgmlItalic
連結的 sgmlLink
若要使此重新定義生效,您必須重新定義所有這些項目,並在您的 vimrc 中定義以下變數(這是因為初始化期間讀取檔案的順序所致):
let sgml_my_rendering=1
您也可以透過將以下行加入您的 vimrc 檔案來停用此渲染功能:
let sgml_no_rendering=1
(改編自 Claudio Fleiner <
[email protected]> 的 html.vim 說明文字)
這涵蓋了舊版 Unix (Bourne) sh 和較新的 shell,例如 bash、dash、posix 和 Korn shell 的語法高亮顯示。
Vim 會嘗試透過指定各種檔案名稱為特定類型來判斷正在使用的 shell 類型,例如:
ksh : .kshrc* *.ksh
bash: .bashrc* bashrc bash.bashrc .bash_profile* *.bash
請參閱 $VIMRUNTIME/filetype.vim 以取得完整的模式清單。如果這些情況都不適用,則會檢查檔案的第一行(例如,尋找 /bin/sh /bin/ksh /bin/bash)。如果第一行指定了 shell 類型,則會使用該 shell 類型。然而,某些檔案(例如 .profile)已知是 shell 檔案,但類型並不清楚。此外,在許多系統上,sh 會符號連結到 "bash" (Linux, Windows+cygwin) 或 "ksh" (Posix)。
可以透過在您的 vimrc 中實例化以下其中一個變數來指定全域預設值:
ksh
let g:is_kornshell = 1
posix:(使用此方法幾乎與將 g:is_kornshell 設定為 1 相同)
let g:is_posix = 1
sh:(預設)Bourne shell
let g:is_sh = 1
(dash 使用者應使用 posix)
如果沒有 "#! ..." 行,且使用者尚未利用剛才顯示的預設 sh.vim 語法設定,則 syntax/sh.vim 會假設 Bourne shell 語法。請不要在錯誤報告中引用 RFC 或市場滲透統計數據,只需選擇您的系統使用的 sh 預設版本,並在您的 <.vimrc> 中安裝相關聯的 "let..." 即可。
syntax/sh.vim 檔案提供了多個層級的基於語法的摺疊:
let g:sh_fold_enabled= 0 (default, no syntax folding)
let g:sh_fold_enabled= 1 (enable function folding)
let g:sh_fold_enabled= 2 (enable heredoc folding)
let g:sh_fold_enabled= 4 (enable if/do/for folding)
然後,各種語法項目(即 HereDocuments 和函式主體)會變成語法可摺疊的(請參閱
:syn-fold)。您也可以將這些項目加總在一起以取得多種類型的摺疊:
let g:sh_fold_enabled= 3 (enables function and heredoc folding)
如果您注意到向後捲動時出現高亮顯示錯誤,並且在以
CTRL-L
重新繪製時會修正,請嘗試將 "sh_minlines" 內部變數設定為較大的數字。範例:
let sh_minlines = 500
這會使語法同步在第一個顯示行之前的 500 行開始。預設值為 200。使用較大數字的缺點是重新繪製速度可能會變慢。
如果您沒有太多需要同步的內容,顯示速度可能會非常慢。為了減少這種情況,可以設定內部變數「sh_maxlines」。範例:
let sh_maxlines = 100
預設是使用兩倍的 sh_minlines。將其設定為較小的數字可以加快顯示速度。缺點是可能會出現高亮錯誤。
syntax/sh.vim 會嘗試將某些問題標記為錯誤;通常是像未配對的「]」、「done」、「fi」等。如果您覺得錯誤處理對您來說有問題,您可以在您的 .vimrc 中加入以下行來抑制此類錯誤高亮顯示
let g:sh_no_error= 1
您可能希望將語言嵌入到 sh 中。我將以 Lorance Stinson 的範例來說明如何使用 awk 進行此操作。將以下檔案放入 $HOME/.config/nvim/after/syntax/sh/awkembed.vim
" AWK Embedding:
" ==============
" Shamelessly ripped from aspperl.vim by Aaron Hope.
if exists("b:current_syntax")
unlet b:current_syntax
endif
syn include @AWKScript syntax/awk.vim
syn region AWKScriptCode matchgroup=AWKCommand start=+[=\\]\@<!'+ skip=+\\'+ end=+'+ contains=@AWKScript contained
syn region AWKScriptEmbedded matchgroup=AWKCommand start=+\<awk\>+ skip=+\\$+ end=+[=\\]\@<!'+me=e-1 contains=@shIdList,@shExprList2 nextgroup=AWKScriptCode
syn cluster shCommandSubList add=AWKScriptEmbedded
hi def link AWKCommand Type
這段程式碼會讓單引號中的 awk 程式碼
awk '...awk code here...'
使用 awk 高亮語法進行高亮顯示。顯然,這可以擴展到其他語言。
Speedup 語法檔案有一些選項
strict_subsections:如果定義了此變數,則只會將章節和小節的關鍵字高亮顯示為陳述式,而不會高亮顯示其他關鍵字(例如 OPERATION 章節中的 WITHIN)。
highlight_types:定義此變數會將像溫度或壓力之類的串流類型高亮顯示為 Type,而不是普通識別符號。其中包含通常在 DECLARE 章節中找到的類型;如果您定義了自己的類型,則必須將它們包含在語法檔案中。
oneline_comments:此值範圍為 1 到 3,並決定了 # 風格註解的高亮顯示。
oneline_comments = 1:允許在偶數個 # 後面使用正常的 Speedup 程式碼。
oneline_comments = 2:將從第二個 # 開始的程式碼顯示為錯誤。這是預設設定。
oneline_comments = 3:如果一行中包含多個 #,則將整行顯示為錯誤。
由於特別是 OPERATION 章節由於 PRESET 變數而往往變得非常大,因此同步可能至關重要。如果您的電腦速度夠快,您可以增加語法檔案末尾附近的 minlines 和/或 maxlines。
雖然 SQL 有 ANSI 標準,但大多數資料庫引擎都會加入自己的自訂擴充功能。Vim 目前支援 Oracle 和 Informix 的 SQL 方言。Vim 預設將 "*.sql" 檔案視為 Oracle SQL。
Vim 目前透過語法腳本支援各種不同供應商的 SQL。您可以將 Vim 的預設值從 Oracle 變更為任何目前支援的 SQL 類型。您也可以輕鬆地逐個緩衝區地變更所使用的 SQL 方言。
Squirrel 是一種高階的命令式、物件導向程式設計語言,旨在成為一種輕量級的腳本語言,可滿足視訊遊戲等應用程式的大小、記憶體頻寬和即時需求。具有以下副檔名的檔案會被識別為 squirrel 檔案:.nut。
這涵蓋了名為「tcsh」的 shell。它是 csh 的超集。請參閱
csh.vim 以了解如何偵測檔案類型。
除非設定了 "backslash_quote" shell 變數,否則 Tcsh 不允許在字串中使用 \"。如果您希望 VIM 假設不存在反斜線引號結構,請將以下行新增至您的 vimrc
:let tcsh_backslash_quote = 0
如果您在向後捲動時注意到高亮錯誤,並且在使用
CTRL-L
重新繪製時會修正這些錯誤,請嘗試將「tcsh_minlines」內部變數設定為更大的數字
:let tcsh_minlines = 1000
這會使語法同步從第一個顯示的行之前 1000 行開始。如果您將「tcsh_minlines」設定為「fromstart」,則會從檔案的開頭開始進行同步。tcsh_minlines 的預設值為 100。使用較大數字的缺點是重新繪製可能會變慢。
從 <syntax/tex.vim> 的 28 版開始,支援基於語法的部分、章節、小節、子節等的折疊。放入
let g:tex_fold_enabled=1
在您的 vimrc 中,以及 :set fdm=syntax。我建議在您的 LaTeX 檔案的末尾透過 modeline 執行後者
% vim: fdm=syntax
如果您的系統變得太慢,您可能需要查看
https://vimhelp.org/vim_faq.txt.html#faq-29.7
如果您不希望在 LaTeX 文件中的任何地方進行拼字檢查,請放入
let g:tex_nospell=1
在您的 vimrc 中。如果您只想抑制僅在註解內的拼字檢查,請參閱
g:tex_comment_nospell。
有些人喜歡在註解中包含程式碼之類的東西,因此希望在 LaTeX 檔案的註解中停用拼字檢查。若要執行此操作,請將以下內容放入您的 vimrc 中
let g:tex_comment_nospell= 1
如果您想抑制 LaTeX 文件中所有位置的拼字檢查,請參閱
g:tex_nospell。
逐字區域通常用於程式碼之類的東西;很少有人希望對程式碼進行拼字檢查。但是,對於那些希望對逐字區域進行拼字檢查的人,請將以下內容放入您的 vimrc 中
let g:tex_verbspell= 1
<syntax/tex.vim> 高亮顯示支援 TeX、LaTeX 和一些 AmsTeX。高亮顯示支援三個主要區域/範圍:normal、texZone 和 texMathZone。雖然已做出相當大的努力使這些區域正確終止,但以 $..$ 和 $$..$$ 分隔的區域無法同步,因為開始和結束模式之間沒有差異。因此,提供了一個特殊的「TeX 註解」
%stopzone
這將強制終止 texZone 或 texMathZone 的高亮顯示。
如果您有速度較慢的電腦,您可能需要降低以下值
:syn sync maxlines=200
:syn sync minlines=50
(特別是後者)。如果您的電腦速度很快,您可能需要增加它們。這主要影響同步(也就是說,螢幕頂部的文字應該屬於哪個群組,如果有的話?)。
最後,如果語法高亮顯示仍然太慢,您可以設定
:let g:tex_fast= ""
在您的 vimrc 中。這樣使用時,g:tex_fast 變數會導致語法高亮顯示腳本避免定義任何區域和相關同步。結果將是更快的語法高亮顯示;代價是:您將不再具有那麼多的高亮顯示或任何基於語法的折疊,並且您將會遺失基於語法的錯誤檢查。
您可能會覺得某些語法是可以接受的;您可以選擇性地使用下表來僅啟用一些語法高亮顯示
b : allow bold and italic syntax
c : allow texComment syntax
m : allow texMatcher syntax (ie. {...} and [...])
M : allow texMath syntax
p : allow parts, chapter, section, etc syntax
r : allow texRefZone syntax (nocite, bibliography, label, pageref, eqref)
s : allow superscript/subscript regions
S : allow texStyle syntax
v : allow verbatim syntax
V : allow texNewEnv and texNewCmd syntax
LaTeX 是一種可程式化的語言,因此有成千上萬個套件,其中充滿了專門的 LaTeX 指令、語法和字體。如果您正在使用這類套件,您通常會希望發行的語法/tex.vim 能夠支援它。然而,顯然這是不切實際的。因此,請考慮使用
mysyntaxfile-add 中的技術,來擴展或修改 syntax/tex.vim 提供的語法高亮。
我已在我的網站上加入了一些對各種常用套件的支援
https://www.drchip.org/astronaut/vim/index.html#LATEXPKGS
這些語法檔案會放在您的 .../after/syntax/tex/ 目錄中。
<tex.vim> 支援各種詞法錯誤檢查。因此,雖然錯誤檢查通常非常有用,但它可能會指出實際上並不存在的錯誤。如果這對您來說是個問題,您可以在您的 vimrc 中加入以下語句
let g:tex_no_error=1
這樣 <syntax/tex.vim> 的所有錯誤檢查都將被抑制。
如果您想在 LaTeX 中加入新的數學群組,以下程式碼會向您展示如何執行此操作
call TexNewMathZone(sfx,mathzone,starform)
您會想要為新的數學群組提供一個唯一的後綴(目前,A-L 和 V-Z 已被 <syntax/tex.vim> 本身佔用)。例如,考慮一下 <syntax/tex.vim> 如何設定 eqnarray
call TexNewMathZone("D","eqnarray",1)
您需要將 "mathzone" 變更為您的新數學群組的名稱,然後在 .vim/after/syntax/tex.vim 中呼叫它。"starform" 變數如果為 true,表示您的新數學群組具有星號形式 (即 eqnarray*)。
可以在
*.tex
檔案中使用 "\makeatletter",從而使命令中可以使用 "@"。然而,由於
*.tex
檔案沒有以下後綴之一:sty cls clo dtx ltx,語法高亮會將此類 @ 的使用標記為錯誤。要解決此問題
:let b:tex_stylish = 1
:set ft=tex
在您的 vimrc 中加入 "let g:tex_stylish=1" 會讓 <syntax/tex.vim> 始終接受這種 @ 的使用。
如果您將
'conceallevel' 設定為 2,並且您的編碼為 utf-8,則許多字元序列可以轉換為適當的 utf-8 字形,包括各種帶重音符號的字元、數學區域中的希臘字元以及數學區域中的上標和下標。並非所有字元都可以變成上標或下標;限制是由於 utf-8 的支援。事實上,只有少數字元支援作為下標。
您可以在您的 vimrc 中設定 g:tex_conceal 來選擇性地使用隱藏模式。預設情況下,g:tex_conceal 設定為 "admgs",以啟用以下字元集的隱藏:
a = accents/ligatures
b = bold and italic
d = delimiters
m = math symbols
g = Greek
s = superscripts/subscripts
如果省略其中一個或多個,則不會進行相關的隱藏字元替換。
通常,LaTeX 關鍵字僅支援 0-9、a-z、A-z 和 192-255。Latex 關鍵字不支援底線 - 除非在 *.sty
檔案中。語法高亮腳本使用以下邏輯處理此問題
* 如果 g:tex_stylish 存在且為 1,則該檔案將被視為 "sty" 檔案,因此 "_" 將被允許作為關鍵字的一部分(無論 g:tex_isk 如何)* 否則,如果檔案的後綴為 sty、cls、clo、dtx 或 ltx,則該檔案將被視為 "sty" 檔案,因此 "_" 將被允許作為關鍵字的一部分(無論 g:tex_isk 如何)
可以精細控制要對哪些上標和下標進行基於語法的隱藏(請參閱
:syn-cchar)。由於並非所有字體都支援所有字元,因此可以覆寫隱藏替換列表;預設情況下,這些列表由以下內容給出
let g:tex_superscripts= "[0-9a-zA-W.,:;+-<>/()=]"
let g:tex_subscripts= "[0-9aehijklmnoprstuvx,+-/().]"
例如,我使用 Luxi Mono Bold;它不支援 "hklmnpst" 的下標字元,因此我放入
let g:tex_subscripts= "[0-9aeijoruvx,+-/().]"
在 ~/.config/nvim/ftplugin/tex/tex.vim 中,以避免出現難以理解的 utf-8 字形。
有時,人們實際上想要不匹配的括號、方括號和/或大括號;例如,\text{(1,10]} 是從但不包括 1 到包括 10 的範圍。當然,這種願望與提供分隔符號不匹配偵測的願望相衝突。為了滿足這些衝突的目標,syntax/tex.vim 提供了
g:tex_matchcheck = '[({[]'
以及其預設設定。因此,如果不想檢查 [] 和 () 是否不匹配,請嘗試使用
let g:tex_matchcheck= '[{}]'
如果您不希望在粗體和斜體區域內進行匹配,
let g:tex_excludematcher= 1
將會阻止 texMatcher 群組包含在這些區域中。
tf 語法高亮顯示有一個選項。
對於同步,minlines 預設為 100。如果您偏好其他值,您可以將 "tf_minlines" 設定為您想要的值。範例
:let tf_minlines = your choice
有一個選項可以控制 TypeScript 語法高亮顯示。
g:typescript_host_keyword 當此變數設定為 1 時,會高亮顯示主機特定的 API,例如
addEventListener
。若要停用,請在您的 .vimrc 中將其設定為零
let g:typescript_host_keyword = 0
預設值為 1。
(g:vim_minlines 和 g:vim_maxlines 是這兩個選項的已棄用變體)
g:vimsyn_embed g:vimsyn_embed 選項允許使用者選擇他們想要擁有哪些類型的嵌入腳本高亮顯示(如果有的話)。
g:vimsyn_embed == 0 : disable (don't embed any scripts)
g:vimsyn_embed == 'lpPr' : support embedded Lua, Perl, Python and Ruby
此選項預設為停用。
g:vimsyn_folding現在,當
'foldmethod' 設定為 "syntax" 時,支援某些摺疊功能
g:vimsyn_folding == 0 or doesn't exist: no syntax-based folding
g:vimsyn_folding =~ 'a' : augroups
g:vimsyn_folding =~ 'f' : fold functions
g:vimsyn_folding =~ 'h' : fold heredocs
g:vimsyn_folding =~ 'l' : fold Lua script
g:vimsyn_folding =~ 'p' : fold Perl script
g:vimsyn_folding =~ 'P' : fold Python script
g:vimsyn_folding =~ 'r' : fold Ruby script
預設情況下,g:vimsyn_folding 未設定。串連指示的字元以支援多個語法結構的摺疊(例如,g:vimsyn_folding = "fh" 將啟用函式和 heredoc 的摺疊)。
預設情況下,字串會在註解內高亮顯示。可以透過將 g:vimsyn_comment_strings 設定為 false 來停用此功能。
g:vimsyn_noerror syntax/vim.vim 所做的並非所有錯誤高亮顯示都可能是正確的;Vim 腳本是一種難以正確高亮顯示的語言。抑制錯誤高亮顯示的一種方法是在您的
vimrc 中放入以下行
let g:vimsyn_noerror = 1
XF86Config 檔案的語法在 XFree86 v3.x 和 v4.x 中有所不同。這兩種變體都受到支援。使用自動偵測,但遠非完美。您可能需要手動指定版本。根據您的 XFree86 版本,在您的 vimrc 中將變數 xf86conf_xfree86_version 設定為 3 或 4。範例
:let xf86conf_xfree86_version=3
當使用多個版本的組合時,請設定 b:xf86conf_xfree86_version 變數。
請注意,選項名稱中的空格和底線不受支援。如果您希望高亮顯示選項名稱,請使用 "SyncOnGreen" 而不是 "__s yn con gr_e_e_n"。
預設會高亮顯示 XML 命名空間。可以透過設定全域變數來抑制此功能
:let g:xml_namespace_transparent=1
xml-folding xml 語法檔案在起始標籤和結束標籤之間提供語法
摺疊(請參閱
:syn-fold)。可以透過以下方式開啟此功能
:let g:xml_syntax_folding = 1
:set foldmethod=syntax
注意:語法折疊可能會顯著減慢語法高亮的速度,尤其是在大型檔案中。
xpm.vim 會根據 XPM 檔案的內容動態建立其語法項目。因此,如果您變更了例如色彩規格字串,您必須再次載入它,例如使用 ":set syn=xpm"。
若要複製具有其中一種顏色的像素,請使用 "yl" 複製「像素」,並使用 "P" 將其插入其他位置。
您想用滑鼠繪圖嗎?試試看以下操作
:function! GetPixel()
: let c = getline(".")[col(".") - 1]
: echo c
: exe "noremap <LeftMouse> <LeftMouse>r" .. c
: exe "noremap <LeftDrag> <LeftMouse>r" .. c
:endfunction
:noremap <RightMouse> <LeftMouse>:call GetPixel()<CR>
:set guicursor=n:hor20 " to see the color beneath the cursor
這會將右鍵變成吸管,左鍵變成筆。它只能用於每個像素只有一個字元的 XPM 檔案,而且您不能點擊像素字串之外的地方,但歡迎您改進它。
使用正方形單元格大小的字體(例如 X)看起來會更好。
:set guifont=-*-clean-medium-r-*-*-8-*-*-*-*-80-*
g:yaml_schema b:yaml_schema YAML 綱要是標籤集和解析非特定標籤的機制組合。對使用者而言,這表示 YAML 解析器可能會根據純量內容,將純量(實際上只能是字串,不能是其他任何東西)視為其他類型的值:null、布林值、浮點數、整數。
g:yaml_schema
選項決定依據哪個綱要來特別突出顯示值。支援的綱要如下
綱要描述
failsafe 不進行額外突出顯示。 json 支援 JSON 風格的數字、布林值和 null。 core 支援更多數字、布林值和 null 風格。 pyyaml 除了核心綱要之外,還支援突出顯示時間戳記,但在識別為數字的內容以及核心綱要中沒有的許多額外布林值方面存在一些差異。
預設綱要是 core
。
請注意,綱要實際上不限於純量,但這是 YAML 規格中定義的綱要之間的唯一差異,也是語法檔案中定義的唯一差異。
zsh 的語法腳本允許基於語法的摺疊
:let g:zsh_fold_enable = 1
Vim 理解三種類型的語法項目
1. 關鍵字 它只能包含關鍵字字元,根據
:syn-iskeyword 或
'iskeyword' 選項指定的字元。它不能包含其他語法項目。它只會與完整的單字(匹配前後沒有關鍵字字元)匹配。關鍵字 "if" 會在 "if(a=b)" 中匹配,但不會在 "ifdef x" 中匹配,因為 "(" 不是關鍵字字元,而 "d" 是。
2. 匹配 這是與單個 regexp 模式的匹配。
3. 區域 此區域從與 "start" regexp 模式匹配的地方開始,並在與 "end" regexp 模式匹配的地方結束。之間可以出現任何其他文字。可以使用 "skip" regexp 模式來避免匹配 "end" 模式。
多個語法 ITEM 可以放入一個語法 GROUP 中。您可以為語法群組提供突出顯示屬性。例如,您可以有一個項目來定義 /* .. */
註解,另一個項目定義 "// .." 註解,並將它們都放入 "Comment" 群組中。然後,您可以指定 "Comment" 將以粗體字體和藍色顯示。您可以自由地為一個語法項目建立一個突出顯示群組,或將所有項目放入一個群組中。這取決於您想要如何指定突出顯示屬性。將每個項目放入自己的群組會導致需要為許多群組指定突出顯示。
請注意,語法群組和突出顯示群組類似。對於突出顯示群組,您將提供突出顯示屬性。這些屬性將用於同名的語法群組。
如果有多個項目在同一個位置匹配,則最後定義的項目獲勝。因此,您可以透過使用匹配相同文字的項目來覆寫先前定義的語法項目。但是,關鍵字始終優先於匹配或區域。且大小寫匹配的關鍵字始終優先於忽略大小寫的關鍵字。
當多個語法項目可能匹配時,會使用以下規則
1. 當多個 Match 或 Region 項目在同一位置開始時,最後定義的項目具有優先權。2. 關鍵字優先於 Match 和 Region 項目。3. 在較早位置開始的項目優先於在較晚位置開始的項目。
:sy[ntax] case [match | ignore] 這定義了以下 ":syntax" 命令在使用 "match" 時是否會區分大小寫,或在使用 "ignore" 時忽略大小寫。請注意,此命令之前的任何項目都不受影響,且所有項目都受影響直到下一個 ":syntax case" 命令。
:sy[ntax] case 顯示 "syntax case match" 或 "syntax case ignore"。其中一個。
:sy[ntax] foldlevel start :sy[ntax] foldlevel minimum 這定義了當使用 foldmethod=syntax 時如何計算行的摺疊層級(請參閱
fold-syntax 和
:syn-fold)
start:使用包含行首的項目的層級。minimum:使用行上項目的最低局部最小值層級。
預設值為 "start"。使用 "minimum" 在行中水平搜尋,找到行上包含的最低層級,然後是較高的層級。當語法項目可能在行內水平關閉和開啟時,這會產生更自然的摺疊。
:sy[ntax] foldlevel 顯示目前的摺疊層級方法,即 "syntax foldlevel start" 或 "syntax foldlevel minimum"。其中一個。
:sy[ntax] spell toplevel :sy[ntax] spell notoplevel :sy[ntax] spell default 這定義了要對不在語法項目中的文字執行拼字檢查的位置
toplevel:文字會進行拼字檢查。notoplevel:文字不會進行拼字檢查。default:當有 @Spell 叢集時,不進行拼字檢查。
對於語法項目中的文字,請使用 @Spell 和 @NoSpell 叢集
spell-syntax。當沒有 @Spell 且沒有 @NoSpell 叢集時,則會對 "default" 和 "toplevel" 執行拼字檢查。
:sy[ntax] spell 顯示目前的語法拼字檢查方法,即 "syntax spell toplevel"、"syntax spell notoplevel" 或 "syntax spell default" 其中一個。
:sy[ntax] iskeyword [clear |
{option}
] 這定義了關鍵字字元。這類似於
'iskeyword' 選項,但僅適用於語法突出顯示。
範例:
:syntax iskeyword @,48-57,192-255,$,_
這會將特定於語法的 iskeyword 選項設定為包含所有字母字元,加上數字字元、所有帶重音符號的字元,以及 "_" 和 "$"。也會包含。
如果沒有給定任何參數,則會輸出目前的值。
:sy[ntax] keyword {group-name}
[{options}
] {keyword}
.. [{options}
]
這會定義多個關鍵字。
{group-name}
是語法群組名稱,例如 "Comment"。 [
{options}
] 請參閱下方的
:syn-arguments。
{keyword}
.. 是屬於此群組的關鍵字清單。
範例:
:syntax keyword Type int long char
{options}
可以出現在行中的任何位置。它們將適用於給定的所有關鍵字,也適用於關鍵字之後的選項。以下範例的功能完全相同
:syntax keyword Type contained int long char
:syntax keyword Type int long contained char
:syntax keyword Type int long char contained
E789 E890 當您有一個具有可選尾部的關鍵字時,例如 Vim 中的 Ex 命令,您可以將可選字元放在 [] 中,以便一次定義所有變化。
:syntax keyword vimCommand ab[breviate] n[ext]
關鍵字始終具有比匹配或區域更高的優先順序,如果有多個項目匹配,則會使用關鍵字。關鍵字不會巢狀,且關鍵字不能包含任何其他內容。
請注意,當您有一個與選項相同的關鍵字時(即使是不允許在此處使用的選項),您也不能使用它。請改用匹配。
關鍵字的最大長度為 80 個字元。
可以多次定義相同的關鍵字,當其包含內容不同時。例如,您可以定義一次未包含的關鍵字,並使用一個突出顯示群組,以及定義一次包含的關鍵字,並使用不同的突出顯示群組。範例
:syn keyword vimCommand tag
:syn keyword vimSetting contained tag
當在任何語法項目之外找到 "tag" 時,會使用 "vimCommand" 突出顯示群組。當在包含 "vimSetting" 的語法項目中找到 "tag" 時,會使用 "vimSetting" 群組。
:sy[ntax] match {group-name}
[{options}
] [excludenl] [keepend] {pattern}
[{options}
]
這會定義一個匹配。
{group-name}
語法群組名稱,例如 "Comment"。 [
{options}
] 請參閱下方的
:syn-arguments。 [excludenl] 不要讓具有行尾 "$" 的模式延伸包含匹配或區域。必須在模式之前給定。
:syn-excludenl keepend 不允許包含的匹配超出具有結束模式的匹配。請參閱
:syn-keepend。
{pattern}
定義匹配的搜尋模式。請參閱下方的
:syn-pattern。請注意,模式可能會匹配多行,這會使匹配取決於 Vim 從哪裡開始搜尋模式。您需要確保同步處理會處理這個問題。
範例(匹配字元常數)
:syntax match Character /'.'/hs=s+1,he=e-1
E398 E399 :sy[ntax] region
{group-name}
[
{options}
] [matchgroup={group-name}] [keepend] [extend] [excludenl] start={start-pattern} .. [skip={skip-pattern}] end={end-pattern} .. [
{options}
]
這會定義一個區域。它可能會跨越多行。
{group-name}
語法群組名稱,例如 "Comment"。 [
{options}
] 請參閱下方的
:syn-arguments。 [matchgroup={group-name}] 僅用於以下起始或結束模式匹配的語法群組。不適用於匹配的起始和結束模式之間的文字。使用 NONE 重設為不對起始或結束匹配使用不同的群組。請參閱
:syn-matchgroup。keepend 不允許包含的匹配超出具有結束模式的匹配。請參閱
:syn-keepend。extend 覆寫此區域包含的項目的 "keepend"。請參閱
:syn-extend。excludenl 不要讓具有行尾 "$" 的模式延伸包含匹配或項目。僅適用於結束模式。必須在它套用的模式之前給定。
:syn-excludenl start={start-pattern} 定義區域開頭的搜尋模式。請參閱下方的
:syn-pattern。skip={skip-pattern} 定義區域內不搜尋結束模式的文字的搜尋模式。請參閱下方的
:syn-pattern。end={end-pattern} 定義區域結尾的搜尋模式。請參閱下方的
:syn-pattern。
範例:
:syntax region String start=+"+ skip=+\\"+ end=+"+
起始/跳過/結束模式以及選項可以以任何順序給定。可以有零個或一個跳過模式。必須有一個或多個起始和結束模式。這表示你可以省略跳過模式,但你必須至少給定一個起始和一個結束模式。等號前後允許有空格(雖然大多數情況下不加空格看起來更好)。
當給定多個起始模式時,只要其中一個匹配即可。這表示起始模式之間是 OR 關係。最後一個匹配的會被使用。結束模式也是如此。
結束模式的搜尋從起始模式之後立即開始。偏移量不適用於此。這表示結束模式的匹配永遠不會與起始模式重疊。
跳過和結束模式可以跨行匹配,但由於模式的搜尋可以在任何行開始,它通常不會達到你想要的效果。跳過模式不會避免下一行中結束模式的匹配。使用單行模式以避免麻煩。
注意:決定是否開始一個區域僅基於匹配的起始模式。沒有檢查是否有匹配的結束模式。這
不起作用
:syn region First start="(" end=":"
:syn region Second start="(" end=";"
第二個總是比第一個匹配(最後定義的模式具有較高的優先級)。然後,第二個區域會持續到下一個';',無論它前面是否有':'。使用匹配確實有效
:syn match First "(\_.\{-}:"
:syn match Second "(\_.\{-};"
這個模式使用 "\_." 匹配任何字元或換行符,並使用 "\{-}" 重複該匹配(盡可能少地重複)。
:syn-keepend 預設情況下,包含的匹配可能會遮蔽結束模式的匹配。這對於巢狀結構很有用。例如,一個以 "{" 開始並以 "}" 結束的區域可以包含另一個區域。遇到 "}" 將結束包含的區域,但不會結束外部區域:{ 開始外部 "{}" 區域 { 開始包含的 "{}" 區域 } 結束包含的 "{}" 區域 } 結束外部 "{} 區域。如果你不希望這樣,"keepend" 參數將使外部區域的結束模式匹配也結束任何包含的項目。這使得不可能巢狀相同的區域,但允許包含的項目高亮顯示結束模式的部分,而不會導致跳過與結束模式的匹配。範例
:syn match vimComment +"[^"]\+$+
:syn region vimCommand start="set" end="$" contains=vimComment keepend
"keepend" 使 vimCommand 總是結束於行尾,即使包含的 vimComment 包含與 <EOL>
的匹配。
當不使用 "keepend" 時,每次包含的匹配之後都會重試結束模式的匹配。當包含 "keepend" 時,將使用第一個遇到的結束模式匹配,截斷任何包含的匹配。
:syn-extend"keepend" 的行為可以使用 "extend" 參數更改。當具有 "extend" 的項目包含在使用 "keepend" 的項目中時,"keepend" 會被忽略,並且包含區域將會被擴展。這可以用於讓某些包含的項目擴展區域,而其他項目則不擴展。範例
:syn region htmlRef start=+<a>+ end=+</a>+ keepend contains=htmlItem,htmlScript
:syn match htmlItem +<[^>]*>+ contained
:syn region htmlScript start=+<script+ end=+</script[^>]*>+ contained extend
這裡 htmlItem 項目不會使 htmlRef 項目進一步延續,它僅用於高亮顯示 <> 項目。htmlScript 項目確實會擴展 htmlRef 項目。
另一個範例
:syn region xmlFold start="<a>" end="</a>" fold transparent keepend extend
這定義了一個具有 "keepend" 的區域,因此其結尾不能被包含的項目更改,例如當 "</a>" 被匹配以不同方式高亮顯示時。但是當 xmlFold 區域是巢狀的(它包含自己)時,"extend" 會應用,因此巢狀區域的 "</a>" 只會結束該區域,而不會結束它所包含的區域。
:syn-excludenl 當匹配或區域的結束模式的模式包含 '$' 以匹配行尾時,它會使它所包含的區域項目在下一行繼續。例如,匹配 "\\$"(行尾的反斜線)可以使通常會在行尾停止的區域繼續。這是預設行為。如果不需要這樣,有兩種方法可以避免它:1. 對於包含的項目使用 "keepend"。這將防止所有包含的匹配擴展匹配或區域。當所有包含的項目都不能擴展包含的項目時可以使用它。2. 在包含的項目中使用 "excludenl"。這將防止該匹配擴展包含的匹配或區域。如果只有某些包含的項目不能擴展包含的項目,則可以使用它。"excludenl" 必須在其適用的模式之前給定。
:syn-matchgroup "matchgroup" 可以用於以與區域主體不同的方式高亮顯示起始和/或結束模式。範例
:syntax region String matchgroup=Quote start=+"+ skip=+\\"+ end=+"+
這會以 "Quote" 群組高亮顯示引號,並以 "String" 群組高亮顯示兩者之間的文字。 "matchgroup" 用於所有後續的起始和結束模式,直到下一個 "matchgroup"。使用 "matchgroup=NONE" 回到不使用匹配群組。
在使用 "matchgroup" 高亮顯示的起始或結束模式中,不使用該區域的包含項目。這可以用於避免包含的項目在起始或結束模式匹配中匹配。當使用 "transparent" 時,這不適用於使用 "matchgroup" 高亮顯示的起始或結束模式匹配。
這是一個範例,它以不同的顏色高亮顯示三個級別的括號
:sy region par1 matchgroup=par1 start=/(/ end=/)/ contains=par2
:sy region par2 matchgroup=par2 start=/(/ end=/)/ contains=par3 contained
:sy region par3 matchgroup=par3 start=/(/ end=/)/ contains=par1 contained
:hi par1 ctermfg=red guifg=red
:hi par2 ctermfg=blue guifg=blue
:hi par3 ctermfg=darkgreen guifg=darkgreen
定義語法項目的 :syntax 命令會採用許多引數。這裡說明了常見的引數。這些引數可以以任何順序給定,並且可以與模式混合使用。
並非所有命令都接受所有引數。此表格顯示哪些引數不能用於所有命令:
E395contains oneline fold display extend concealends~ :syntax keyword - - - - - - :syntax match yes - yes yes yes - :syntax region yes yes yes yes yes yes
這些引數可以用於所有三個命令:conceal cchar contained containedin nextgroup transparent skipwhite skipnl skipempty
當給定 "concealends" 引數時,區域的起始和結束匹配(但不是區域的內容)會被標記為可隱藏。它們是否實際隱藏取決於
'conceallevel' 選項的設定。只有當區域的結尾透過 "matchgroup" 具有自己的高亮顯示時,才能以這種方式單獨隱藏它們。
synconcealed() 函數可以用於檢索有關隱藏項目的資訊。
cchar
:syn-cchar
E844 "cchar" 引數定義在項目隱藏時顯示的字元(僅當給定 conceal 引數時設定 "cchar" 才有意義)。如果未設定 "cchar",則會使用
'listchars' 選項中定義的預設隱藏字元。字元不能是控制字元,例如 Tab。範例
:syntax match Entity "&" conceal cchar=&
請參閱
hl-Conceal 了解高亮顯示。
當給定 "contained" 引數時,這個項目將不會在頂層被識別,而只會在另一個匹配的 "contains" 欄位中提到它時才會被識別。範例
:syntax keyword Todo TODO contained
:syntax match Comment "//.*" contains=Todo
display
:syn-display
如果給定 "display" 引數,當偵測到的高亮顯示不會顯示時,這個項目將會被跳過。這將透過在僅尋找要顯示的文字的語法狀態時跳過這個項目,來加速高亮顯示。
通常,您可以將 "display" 用於符合這些條件的 match 和 region 項目
該項目不會延續到行尾。C 語言的範例:用於 "/*" 註解的區域不能包含 "display",因為它會在下一行繼續。
該項目不包含會延續到行尾或使其在下一行繼續的項目。
該項目不會更改它所包含的任何項目的大小。C 語言的範例:前處理器匹配中帶有 "\\$" 的匹配不能具有 "display",因為它可能會使該前處理器匹配縮短。
該項目不允許其他項目匹配否則不會匹配的項目,並且該項目也可能將匹配延伸太遠。C 語言的範例:用於 "//" 註解的匹配不能使用 "display",因為該註解內的 "/*" 將會匹配,然後開始一個會延伸到行尾的註解。
C 語言的範例,其中可以使用 "display"
與數字匹配
與標籤匹配
如果給定 "transparent" 引數,則這個項目本身不會被高亮顯示,而是會採用它所包含的項目的高亮顯示。這對於不需要任何高亮顯示但僅用於跳過部分文字的語法項目非常有用。
"contains=" 引數也會從它所包含的項目繼承,除非為透明項目本身給定了 "contains" 引數。為了避免包含不需要的項目,請使用 "contains=NONE"。範例,它會高亮顯示字串中的單字,但 "vim" 除外
:syn match myString /'[^']*'/ contains=myWord,myVim
:syn match myWord /\<[a-z]*\>/ contained
:syn match myVim /\<vim\>/ transparent contained contains=NONE
:hi link myString String
:hi link myWord Comment
由於 "myVim" 匹配在 "myWord" 之後,它是首選的匹配(相同位置的最後一個匹配會覆蓋較早的匹配)。 "transparent" 引數使 "myVim" 匹配使用與 "myString" 相同的高亮顯示。但它不包含任何內容。如果省略 "contains=NONE" 引數,那麼 "myVim" 將會使用來自 myString 的 contains 引數,並允許包含 "myWord",這將會高亮顯示為註解。發生這種情況的原因是,包含的匹配不會在同一位置內匹配自身,因此 "myVim" 匹配不會在此處覆蓋 "myWord" 匹配。
當您查看彩色文字時,就像查看包含項目的圖層一樣。包含的項目位於其所包含項目的頂部,因此您會看到包含的項目。當包含的項目是透明時,您可以看穿它,因此您會看到它所包含的項目。在圖片中
從這裡看
| | | | | | V V V V V V
xxxx yyy 更多包含的項目 .................... 包含的項目(透明) ============================= 第一個項目
'x'、'y' 和 '=' 代表高亮顯示的語法項目。'.' 代表透明群組。
你看到的是
=======xxxx=======yyy========
因此您會看穿透明的 ".... "。
"oneline" 引數表示該區域不會跨越行邊界。它必須在目前行中完全匹配。但是,當區域具有跨越行邊界的包含項目時,它仍會在下一行繼續。包含的項目可以用於識別行繼續模式。但 "end" 模式仍然必須在第一行中匹配,否則該區域甚至不會開始。
當起始模式包含 "\n" 以匹配行尾時,結束模式必須與起始模式結束的位置在同一行找到。結束模式也可以包含行尾。因此,"oneline" 參數表示起始模式的結尾和結束模式的開頭必須在同一行內。這無法被匹配換行符的跳過模式所改變。
"fold" 參數會使此項目的摺疊層級增加一。範例:
:syn region myFold start="{" end="}" transparent fold
:syn sync fromstart
:set foldmethod=syntax
這將使每個 {} 區塊形成一個摺疊。
"contains" 參數後面接著一個語法群組名稱的列表。這些群組將被允許在此項目內開始(它們可能會延伸超過包含群組的結尾)。這允許匹配和區域的遞迴巢狀。如果沒有 "contains" 參數,則此項目中不會包含任何群組。群組名稱不需要在使用前定義。
contains=ALL 如果 contains 列表中的唯一項目是 "ALL",則所有群組都將被接受在此項目內。
contains=ALLBUT,{group-name},.. 如果 contains 列表中的第一個項目是 "ALLBUT",則所有群組都將被接受在此項目內,但列出的群組除外。範例:
:syntax region Block start="{" end="}" ... contains=ALLBUT,Function
contains=TOP 如果 contains 列表中的第一個項目是 "TOP",則所有沒有 "contained" 參數的群組都將被接受。contains=TOP,{group-name},.. 類似 "TOP",但排除列出的群組。
contains=CONTAINED 如果 contains 列表中的第一個項目是 "CONTAINED",則所有具有 "contained" 參數的群組都將被接受。contains=CONTAINED,{group-name},.. 類似 "CONTAINED",但排除列出的群組。
"contains" 列表中的
{group-name}
可以是一個模式。所有符合該模式的群組名稱都將被包含(或排除,如果使用 "ALLBUT")。模式不能包含空白或逗號 ','。範例:
... contains=Comment.*,Keyw[0-3]
匹配將在執行語法命令時完成。稍後定義的群組將不會被匹配。此外,如果目前的語法命令定義了一個新的群組,它也不會被匹配。請注意:當將語法命令放入檔案中時,您不能依賴群組未被定義,因為該檔案可能已經被執行過,而 ":syn clear" 不會移除群組名稱。
包含的群組也會在區域的起始和結束模式中匹配。如果這不是想要的,可以使用 "matchgroup" 參數
:syn-matchgroup。"ms=" 和 "me=" 偏移量可用於更改包含項目匹配的區域。請注意,這也可能限制突出顯示的區域。
"containedin" 參數後面接著一個語法群組名稱的列表。此項目將被允許在這些群組內開始。這就像包含項目具有包含此項目的 "contains=" 參數一樣。
{group-name}
... 可以像上面解釋的 "contains" 一樣使用。
這在之後添加語法項目時很有用。可以告知項目包含在已存在的項目中,而無需更改該項目的定義。例如,在加載 C 語法後,突出顯示 C 註解中的一個單字:
:syn keyword myword HELP containedin=cComment contained
請注意,也使用了 "contained",以避免該項目在頂層匹配。
"containedin" 的匹配會添加到項目可能出現的其他位置。也可以像往常一樣添加 "contains" 參數。請不要忘記關鍵字永遠不包含其他項目,因此將它們添加到 "containedin" 不會起作用。
"nextgroup" 參數後面接著一個語法群組名稱的列表,以逗號分隔(就像 "contains" 一樣,因此您也可以使用模式)。
如果給定 "nextgroup" 參數,則在匹配或區域結束後,將嘗試匹配提到的語法群組。如果沒有群組匹配,突出顯示將正常繼續。如果有匹配,則將使用此群組,即使它沒有在目前群組的 "contains" 欄位中提到。這就像給予提到的群組優先於所有其他群組的權限。範例:
:syntax match ccFoobar "Foo.\{-}Bar" contains=ccFoo
:syntax match ccFoo "Foo" contained nextgroup=ccFiller
:syntax region ccFiller start="." matchgroup=ccBar end="Bar" contained
這將以不同的方式突出顯示 "Foo" 和 "Bar",並且只有在 "Foo" 之後有 "Bar" 時才會這樣做。在下面的文字行中,"f" 顯示 ccFoo 用於突出顯示的位置,而 "bbb" 顯示 ccBar 用於突出顯示的位置。
Foo asdfasd Bar asdf Foo asdf Bar asdf
fff bbb fff bbb
請注意使用 ".\{-}" 來盡可能少地跳過直到下一個 Bar。當使用 ".*" 時,"Bar" 和 "Foo" 之間的 "asdf" 將根據 "ccFoobar" 群組突出顯示,因為 ccFooBar 匹配將包括該行中的第一個 "Foo" 和最後一個 "Bar"(請參閱
pattern)。
這些參數僅與 "nextgroup" 結合使用。它們可以用來允許下一個群組在跳過一些文字後匹配:skipwhite 跳過空格和 Tab 字元 skipnl 跳過行的結尾 skipempty 跳過空行(暗示 "skipnl")
當存在 "skipwhite" 時,只有在沒有下一個群組匹配空白字元的情況下才會跳過空白字元。
當存在 "skipnl" 時,下一個群組的匹配可能在下一行找到。只有在目前項目在目前行的結尾結束時才會發生這種情況!當不存在 "skipnl" 時,nextgroup 只會在同一行中目前項目之後找到。
在尋找下一個群組時跳過文字時,將忽略其他群組的匹配。只有在沒有下一個群組匹配時,才會再次嘗試匹配其他項目。這表示匹配下一個群組並跳過空白字元和 <EOL>
s 比其他項目具有更高的優先權。
範例:
:syn match ifstart "\<if.*" nextgroup=ifline skipwhite skipempty
:syn match ifline "[^ \t].*" nextgroup=ifline skipwhite skipempty contained
:syn match ifline "endif" contained
請注意,"[^ \t].*" 匹配所有非空白文字。因此,它也會匹配 "endif"。因此,"endif" 匹配放在最後,以便它具有優先權。請注意,此範例不適用於巢狀 "if"。您需要添加 "contains" 參數才能使其正常工作(為了簡化範例而省略)。
:sy[ntax] conceal [on|off] 這定義了以下 ":syntax" 命令是否會定義帶有 "conceal" 旗標設定的關鍵字、匹配或區域。在 ":syn conceal on" 之後,所有後續定義的 ":syn keyword"、":syn match" 或 ":syn region" 都將隱式設定 "conceal" 旗標。":syn conceal off" 返回到必須明確給出 "conceal" 旗標的正常狀態。
:sy[ntax] conceal 顯示 "syntax conceal on" 或 "syntax conceal off"。
在語法命令中,模式必須被兩個相同的字元包圍。這就像 ":s" 命令一樣運作。最常用的是雙引號。但是如果模式包含雙引號,您可以使用模式中未使用的另一個字元。範例:
:syntax region Comment start="/\*" end="\*/"
:syntax region String start=+"+ end=+"+ skip=+\\"+
請參閱
pattern 以了解模式的說明。語法模式始終像設定了
'magic' 選項一樣解釋,無論
'magic' 的實際值為何。並且模式的解釋方式就像 'l' 旗標未包含在
'cpoptions' 中一樣。這樣做的目的是使語法檔案可移植並獨立於
'magic' 設定。
盡量避免匹配空字串的模式,例如 "[a-z]*"。這會大大減慢突出顯示的速度,因為它會在各處匹配。
:syn-pattern-offset 模式後面可以跟著字元偏移量。這可以用來更改突出顯示的部分,以及更改包含在匹配或區域中的文字區域(這僅在嘗試匹配其他項目時才有意義)。兩者都是相對於匹配模式而言。跳過模式的字元偏移量可用於告知在哪裡繼續尋找結束模式。
偏移量採用 "{what}={offset}" 的形式。 {what}
可以是七個字串之一:
ms 匹配開始的偏移量,用於匹配文字的開始 me 匹配結束的偏移量,用於匹配文字的結尾 hs 突出顯示開始的偏移量,用於突出顯示開始的位置 he 突出顯示結束的偏移量,用於突出顯示結束的位置 rs 區域開始的偏移量,用於區域主體的開始位置 re 區域結束的偏移量,用於區域主體的結束位置 lc 引導上下文偏移量,超過模式的「引導上下文」
{offset}
可以是:
s 匹配模式的開始 s+{nr} 匹配模式的開始加上向右 {nr}
個字元 s-{nr} 匹配模式的開始加上向左 {nr}
個字元 e 匹配模式的結束 e+{nr} 匹配模式的結束加上向右 {nr}
個字元 e-{nr} 匹配模式的結束加上向左 {nr}
個字元 {nr}
(僅適用於 "lc"):從開始右邊 {nr}
個字元開始匹配
範例:"ms=s+1"、"hs=e-2"、"lc=3"。
雖然所有偏移量都可以在任何模式之後接受,但它們並不總是具有意義。下表顯示了實際使用的偏移量:
ms me hs he rs re lc
匹配項目 是 是 是 是 - - 是 區域項目開始 是 - 是 - 是 - 是 區域項目跳過 - 是 - - - - 是 區域項目結束 - 是 - 是 - 是 是
偏移量可以用逗號 ',' 連接。範例:
:syn match String /"[^"]*"/hs=s+1,he=e-1
some "string" text ^^^^^^ highlighted
注意事項:
模式和字元偏移量之間不能有空白。
突出顯示的區域永遠不會超出匹配文字的範圍。
結束樣式的負偏移量不一定總是有效,因為結束樣式可能會在反白應該已經停止時被偵測到。
在 Vim 7.2 之前,偏移量是以位元組而不是字元來計算的。這對於多位元組字元效果不佳,因此在 Vim 7.2 版本中進行了更改。
比對的開始位置不能在樣式比對到的行以外的行。這是不行的:"a\nb"ms=e。你可以讓反白從另一行開始,這樣可以:"a\nb"hs=e。
範例 (比對註解但不反白
/* 和 */
)
:syntax region Comment start="/\*"hs=e+1 end="\*/"he=s-1
/* this is a comment */
^^^^^^^^^^^^^^^^^^^ highlighted
一個更複雜的範例
:syn region Exa matchgroup=Foo start="foo"hs=s+2,rs=e+2 matchgroup=Bar end="bar"me=e-1,he=e-1,re=s-1
abcfoostringbarabc
mmmmmmmmmmm match
sssrrreee highlight start/region/end ("Foo", "Exa" and "Bar")
注意:這是一個過時的功能,僅為了與先前的 Vim 版本向後相容而包含。現在建議在樣式中使用
/\@<= 結構。您也經常可以使用
/\zs。
"lc" 偏移量指定前導上下文,也就是樣式中必須存在但未被視為比對一部分的部分。偏移量 "lc=n" 會導致 Vim 在嘗試樣式比對之前向後退 n 個欄位,允許先前樣式中已經比對的字元也用作此比對的前導上下文。例如,這可以用於指定比對之前不能有「跳脫」字元。
:syn match ZNoBackslash "[^\\]z"ms=s+1
:syn match WNoBackslash "[^\\]w"lc=1
:syn match Underline "_\+"
___zzzz ___wwww ^^^ ^^^ 比對底線 ^ ^ 比對 ZNoBackslash ^^^^ 比對 WNoBackslash
除非您明確設定 "ms",否則 "ms" 偏移量會自動設定為與 "lc" 偏移量相同的值。
樣式可以包含 "\n" 以比對行尾。大多數情況下,這會如預期般運作,但也有一些例外情況。
當使用帶有偏移量的開始樣式時,比對的開始位置不能在下一行開始。但是反白可以從下一行開始。使用 "\zs" 項目也要求比對的開始位置不能移動到另一行。
跳過樣式可以包含 "\n",但是搜尋結束樣式將在下一行的第一個字元繼續進行,即使該字元與跳過樣式比對也是如此。這是因為重新繪製可能會在區域中間的任何行開始,並且沒有檢查跳過樣式是否在前一行開始。例如,如果跳過樣式是 "a\nb" 且結束樣式是 "b",則結束樣式會在此的第二行比對到。
x x a
b x x
一般來說,這意味著跳過樣式不應比對 "\n" 之後的任何字元。
這些額外的正規表示式項目在區域樣式中可用
有時,區域的開始和結束樣式需要共享一個共同的子表示式。一個常見的例子是 Perl 和許多 Unix shell 中的「here」文件。可以使用 "\z" 特殊正規表示式項目來實現此效果,該項目將子表示式標記為「外部」,這表示可以從定義它的樣式外部引用它。例如,here-document 的範例可以這樣完成
:syn region hereDoc start="<<\z(\I\i*\)" end="^\z1$"
如此處可見,\z 實際上執行雙重任務。在開始樣式中,它將 "\(\I\i*\)" 子表示式標記為外部;在結束樣式中,它將 \z1 反向引用變為指向開始樣式中第一個外部子表示式的外部引用。外部引用也可以在跳過樣式中使用。
:syn region foo start="start \z(\I\i*\)" skip="not end \z1" end="end \z1"
請注意,正常和外部子表示式是完全正交的並且被單獨索引;例如,如果將樣式 "\z(..\)\(..\)" 應用於字串 "aabb",則 \1 將引用 "bb",而 \z1 將引用 "aa"。另請注意,外部子表示式不能像正常子表示式一樣在同一樣式中作為反向引用存取。如果您想將一個子表示式同時用作正常和外部子表示式,則可以將兩者巢狀,例如 "\(\z(...\)\)"。
請注意,只能使用單行中的比對。不能引用多行比對。
:sy[ntax] cluster {叢集名稱}
[contains={群組名稱}..] [add={群組名稱}..] [remove={群組名稱}..]
此命令允許您將語法群組列表一起叢集在單一名稱下。
contains={群組名稱}.. 叢集設定為指定的群組列表。add={群組名稱}.. 指定的群組會新增到叢集中。remove={群組名稱}.. 指定的群組會從叢集中移除。
這樣定義的叢集可以在 contains=..、containedin=..、nextgroup=..、add=.. 或 remove=.. 列表中使用 "@" 前綴引用。您也可以使用此符號在指定其內容之前隱式宣告叢集。
範例:
:syntax match Thing "# [^#]\+ #" contains=@ThingMembers
:syntax cluster ThingMembers contains=ThingMember1,ThingMember2
如先前的範例所示,對叢集的修改實際上是追溯性的;叢集的成員資格在最後一刻進行檢查,可以這麼說。
:syntax keyword A aaa
:syntax keyword B bbb
:syntax cluster AandB contains=A
:syntax match Stuff "( aaa bbb )" contains=@AandB
:syntax cluster AandB add=B " now both keywords are matched in Stuff
這也對巢狀叢集有影響
:syntax keyword A aaa
:syntax keyword B bbb
:syntax cluster SmallGroup contains=B
:syntax cluster BigGroup contains=A,@SmallGroup
:syntax match Stuff "( aaa bbb )" contains=@BigGroup
:syntax cluster BigGroup remove=B " no effect, since B isn't in BigGroup
:syntax cluster SmallGroup remove=B " now bbb isn't matched within Stuff
對於一種語言的語法檔案來說,包含相關語言的語法檔案通常很有用。根據確切的關係,可以通過兩種不同的方式來完成
如果包含的語法檔案中的頂層語法項目允許在包含的語法的頂層,您可以簡單地使用
:runtime 命令
" In cpp.vim:
:runtime! syntax/c.vim
:unlet b:current_syntax
如果包含的語法檔案中的頂層語法項目要包含在包含語法中的一個區域內,您可以使用 ":syntax include" 命令
:sy[ntax] include [@{群組列表名稱}] {檔案名稱}
包含的檔案中宣告的所有語法項目都將新增 "contained" 標誌。此外,如果指定了群組列表,則包含的檔案中的所有頂層語法項目都將新增到該列表中。
" In perl.vim:
:syntax include @Pod <sfile>:p:h/pod.vim
:syntax region perlPOD start="^=head" end="^=cut" contains=@Pod
當
{檔案名稱}
是絕對路徑(以 "/"、"c:"、"$VAR" 或 "<sfile>" 開頭)時,會載入該檔案。當它是相對路徑(例如,"syntax/pod.vim")時,會在
'runtimepath' 中搜尋該檔案。會載入所有符合的檔案。建議使用相對路徑,因為它允許使用者使用自己的版本替換包含的檔案,而無需替換執行 ":syn include" 的檔案。
Vim 希望能夠從文件中任何位置開始重新繪製。為了實現這一點,它需要知道開始重新繪製的位置的語法狀態。
:sy[ntax] sync [ccomment [群組名稱] | minlines={N} | ...]
如果給定 "minlines={N}" 引數,則解析始終至少向後開始 N 行。如果解析可能需要幾行才能正確,或者無法使用同步時,可以使用此選項。
如果給定 "maxlines={N}" 引數,則搜尋註解或同步樣式的行數限制為向後 N 行(在新增 "minlines" 之後)。如果您只有少量內容要同步,而且機器速度較慢,這會很有用。範例
:syntax sync maxlines=500 ccomment
:syn-sync-linebreaks 當使用比對多行的樣式時,在一行中的變更可能會導致樣式在先前行中不再比對。這意味著必須從進行變更的位置上方開始。可以使用 "linebreaks" 引數指定多少行。例如,當樣式可能包含一個換行符時,請使用此選項
:syntax sync linebreaks=1
結果是重新繪製始終從進行變更的位置至少前一行開始。"linebreaks" 的預設值為零。通常,"minlines" 的值大於 "linebreaks"。
第一種同步方法:
:syn-sync-first
:syntax sync fromstart
檔案將從開頭開始解析。這可以使語法反白準確,但對於長檔案來說可能會很慢。Vim 會快取先前解析的文字,因此只有在第一次解析文字時才會很慢。但是,在進行變更時,需要重新解析文字的某些部分(最壞的情況:到檔案結尾)。
使用 "fromstart" 等同於使用 "minlines" 和一個非常大的數字。
對於第二種方法,只需要提供 "ccomment" 參數。範例:
:syntax sync ccomment
當 Vim 發現顯示起始行在 C 語言風格的註解內時,會使用群組名稱為 "Comment" 的最後一個區域語法項目。這要求必須存在一個群組名稱為 "Comment" 的區域!可以指定替代的群組名稱,例如:
:syntax sync ccomment javaComment
這表示會使用最後一個以 "syn region javaComment" 指定的項目來處理偵測到的 C 註解區域。只有當該區域具有起始樣式 "\/*" 和結束樣式 "*\/" 時,此方法才能正常運作。
可以使用 "maxlines" 參數來限制搜尋的行數。"minlines" 參數可以用於至少從後面的幾行開始(例如,當有些結構只佔幾行,但很難同步時)。
注意:當字串跨行並包含 "*/" 時,C 註解的同步無法正常運作。由於讓字串跨行是不良的程式設計習慣(許多編譯器會發出警告訊息),而且在註解中出現 "*/" 的機率非常小,因此這種限制幾乎不會被注意到。
對於第三種方法,只需要提供 "minlines={N}" 參數。Vim 會從行號減去
{N}
,並從那裡開始解析。這表示需要解析
{N}
個額外的行,這會使此方法稍慢一些。範例:
:syntax sync minlines=50
"lines" 等同於 "minlines"(舊版本使用)。
其概念是在一些稱為同步樣式的特定區域的結尾進行同步。只有區域可以跨行,因此當我們找到某些區域的結尾時,我們可能會知道我們在哪個語法項目中。搜尋從重新繪製開始行的上一行開始。從那裡,搜尋會在文件中向後繼續。
這與非同步的語法項目類似。您可以使用包含的匹配、nextgroup 等。但有一些差異:
不能使用關鍵字。
帶有 "sync" 關鍵字的語法項目形成一個完全獨立的語法項目群組。您不能混合同步群組和非同步群組。
匹配在緩衝區中向後(逐行)工作,而不是向前。
可以提供行接續樣式。它用於決定哪組行需要像一行一樣被搜尋。這表示指定項目的匹配搜尋會從包含接續樣式的連續行的第一行開始。
當使用 "nextgroup" 或 "contains" 時,它只在同一行(或連續行的群組)內工作。
當使用區域時,它必須在同一行(或連續行的群組)中開始和結束。否則,會假設結束在行尾(或連續行的群組)。
當找到與同步樣式匹配的項目時,會在該行的其餘部分(或連續行的群組)中搜尋另一個匹配項。使用最後一個匹配項。這用於當一行可以同時包含區域的開始和結束時(例如,在 C 註解中,如 /* this */
,會使用最後一個 "*/")。
同步樣式的匹配方式有兩種:1. 高亮顯示的解析從重新繪製開始的地方開始(以及同步樣式的搜尋開始的地方)。必須指定預期在那裡有效的語法群組。當跨行的區域不能包含其他區域時,這很有效。2. 高亮顯示的解析在匹配之後立即繼續。必須指定預期在匹配之後存在的語法群組。當前一種方法無法很好地工作時,可以使用這種方法。它速度較慢,因為需要解析更多的文字。可以同時使用這兩種同步樣式。
除了同步樣式外,還可以指定其他匹配和區域,以避免找到不需要的匹配項。
(同步樣式單獨給出的原因是,大多數情況下,搜尋同步點比弄清楚高亮顯示要簡單得多。減少模式的數量意味著它會更快。)
定義一個用於同步的匹配項。{群組名稱}
是緊接在匹配項之後的語法群組的名稱。高亮顯示的文字解析從匹配之後立即開始。必須存在此 {群組名稱}
的區域。將使用定義的第一個。當匹配後沒有語法群組時,可以使用 "NONE"。
與 "grouphere" 類似,但 {群組名稱}
是在開始搜尋同步點的行的開頭使用的語法群組的名稱。假設匹配與同步樣式搜尋開始之間的文字不會更改語法高亮顯示。例如,在 C 語言中,您可以向後搜尋 "/*" 和 "*/"。如果先找到 "/*",則表示您在註解內,因此 "groupthere" 是 "cComment"。如果先找到 "*/",則表示您不在註解中,因此 "groupthere" 是 "NONE"。(實際上,情況會稍微複雜一些,因為 "/*" 和 "*/" 可能會出現在字串內。這留給讀者練習...)。
:syntax sync match .. :syntax sync region ..
不帶 "groupthere" 參數。定義在搜尋同步點時跳過的區域或匹配項。
當 {模式}
在一行中匹配時,會認為它在下一行中繼續。這表示同步點的搜尋會將這些行視為串連的。
如果同時給出 "maxlines={N}" 參數,則搜尋匹配的行數會限制為 N。如果您只有很少的東西需要同步並且機器速度較慢,這很有用。範例:
:syntax sync maxlines=100
您可以使用以下命令清除所有同步設定:
:syntax sync clear
您可以使用以下命令清除特定的同步模式:
:syntax sync clear {sync-group-name} ..
此命令列出所有語法項目
:sy[ntax] [list]
顯示一個語法群組的語法項目:
:sy[ntax] list {group-name}
列出一個叢集中的語法群組:
E392:sy[ntax] list @{cluster-name}
請參閱上文,以了解 ":syntax" 命令的其他參數。
請注意,":syntax" 命令可以縮寫為 ":sy",雖然 ":syn" 比較常用,因為它看起來更好。
有兩種高亮顯示群組:
用於特定語言的群組。對於這些群組,名稱以語言的名稱開頭。這些群組中的許多都沒有任何屬性,而是連結到第二種類型的群組。
hitest.vim您可以使用此命令查看目前所有活動的群組:
:so $VIMRUNTIME/syntax/hitest.vim
這將開啟一個新視窗,其中包含所有高亮顯示群組名稱,並以它們自己的顏色顯示。
如果尚未定義 g:colors_name,則 :colo 將輸出 "default"。
:colo[rscheme]
{名稱}
載入配色方案
{名稱}
。這會在
'runtimepath' 中搜尋檔案 "colors/{name}.{vim,lua}"。將載入找到的第一個。
注意:會先嘗試 "colors/{name}.vim"。也會在
'packpath' 中搜尋所有外掛程式,先在 "start" 下面搜尋,然後在 "opt" 下面搜尋。
無法遞迴運作,因此您無法在配色方案腳本中使用 ":colorscheme"。
若要自訂配色方案,請使用另一個名稱,例如 "~/.config/nvim/colors/mine.vim",並使用
:runtime
來載入原始配色方案:
runtime colors/evening.vim
hi Statement ctermfg=Blue guifg=Blue
在載入配色方案之前,會觸發
ColorSchemePre 自動命令事件。在載入配色方案之後,會觸發
ColorScheme 自動命令事件。有關編寫配色方案檔案的資訊:
:edit $VIMRUNTIME/colors/README.txt
:hi[ghlight] 列出所有已設定屬性的目前高亮顯示群組。
:hi[ghlight] {群組名稱}
列出一個高亮顯示群組。
:hi[ghlight] clear {群組名稱}
:hi[ghlight] {群組名稱}
NONE 停用一個高亮顯示群組的高亮顯示。它_不會_設定回預設顏色。
通常,高亮顯示群組會在啟動時新增一次。這會設定高亮顯示的預設值。之後,您可以使用其他高亮顯示命令來變更您想要設定為非預設值的參數。值 "NONE" 可用於關閉該值或返回預設值。
變更顏色的簡單方法是使用
:colorscheme 命令。這會載入一個包含 ":highlight" 命令的檔案,如下所示:
:hi Comment gui=bold
請注意,所有未包含的設定都保持不變,只會使用指定的欄位,並且設定會與先前的設定合併。因此,結果就像使用了此單一命令:
:hi Comment ctermfg=Cyan guifg=#80a0ff gui=bold
Comment xxx ctermfg=4 guifg=Blue
上次設定來自 /home/mool/vim/vim7/runtime/syntax/syncolor.vim
當使用 ":hi clear" 時,會提及使用此命令的腳本以取得預設值。請參閱
:verbose-cmd 以取得更多資訊。
每一種 UI 都可以設定其對應的高亮顯示。這使得在所有 UI 上使用相同的語法檔案成為可能。
1. TUI 高亮顯示參數
請注意,「bold」可以在這裡使用,也可以透過使用粗體字型來使用。它們的效果相同。「undercurl」、「underdouble」、「underdotted」和「underdashed」在不支援它們的終端中會回退到「underline」。顏色使用
guisp 設定。
使用「start」參數指定的跳脫序列會寫在突出顯示區域中的字元之前。它可以是您想要發送到終端以突出顯示此區域的任何內容。使用「stop」參數指定的跳脫序列會寫在突出顯示區域之後。這應該撤銷「start」參數。否則,螢幕看起來會亂七八糟。
{term-list}
是一個包含跳脫序列的字串。這是任何字元串,但不能以「t_」開頭,且不允許空格。這裡會識別 <> 表示法,因此您可以使用類似「<Esc>」和「<Space>」之類的東西。範例:start=<Esc>[27h;<Esc>[<Space>
r;
ctermfg={color-nr}
ctermfg E421 ctermbg={color-nr}
ctermbg{color-nr}
參數是一個顏色編號。其範圍從零到(不包含)可用的
tui-colors 數量。具有此編號的實際顏色取決於終端類型及其設定。有時,顏色也取決於「cterm」的設定。例如,在某些系統上,「cterm=bold ctermfg=3」會產生另一種顏色,在其他系統上,您只會得到顏色 3。
以下(不區分大小寫)名稱會被識別
cterm-colors
NR-16 NR-8 顏色名稱
0 0 Black 1 4 DarkBlue 2 2 DarkGreen 3 6 DarkCyan 4 1 DarkRed 5 5 DarkMagenta 6 3 Brown, DarkYellow 7 7 LightGray, LightGrey, Gray, Grey 8 0* DarkGray, DarkGrey 9 4* Blue, LightBlue 10 2* Green, LightGreen 11 6* Cyan, LightCyan 12 1* Red, LightRed 13 5* Magenta, LightMagenta 14 3* Yellow, LightYellow 15 7* White
「NR-16」下的數字用於 16 色終端('t_Co' 大於或等於 16)。「NR-8」下的數字用於 8 色終端('t_Co' 小於 16)。「*」表示為 ctermfg 設定了粗體屬性。在許多 8 色終端(例如,「linux」)中,這會使亮色顯示。這對背景顏色不起作用!沒有「*」,粗體屬性會被移除。如果您想以不同的方式設定粗體屬性,請在「ctermfg=」或「ctermbg=」參數之後放置一個「cterm=」參數。或者使用數字而不是顏色名稱。
請注意,對於 16 色 ansi 樣式終端(包括 xterms),會使用 NR-8 列中的數字。這裡「*」表示「加 8」,因此 Blue 為 12,DarkGray 為 8 等。
請注意,對於某些彩色終端,這些名稱可能會產生錯誤的顏色!
您也可以使用「NONE」來移除顏色。
:hi-normal-cterm 當為 Normal 群組設定「ctermfg」或「ctermbg」顏色時,這些顏色將成為用於非高亮顯示文字的顏色。範例
:highlight Normal ctermfg=grey ctermbg=darkblue
當您為 Normal 群組設定「ctermfg」或「ctermbg」時,Vim 需要在退出時重置顏色。這是使用「orig_pair」
terminfo 條目完成的。
E419 E420 當 Vim 知道正常的文字和背景顏色時,「fg」和「bg」可以用作顏色名稱。這僅在為 Normal 群組和 MS-Windows 主控台設定顏色後才有效。範例,用於反相顯示
:highlight Visual ctermfg=bg ctermbg=fg
請注意,顏色是在給定此命令時有效的顏色。如果稍後變更 Normal 群組的顏色,「fg」和「bg」顏色將不會被調整。
2. GUI 高亮顯示參數
gui={attr-list}
highlight-gui這些指定要在 GUI 模式中使用的屬性。有關說明,請參閱
attr-list。請注意,「bold」可以在這裡使用,也可以透過使用粗體字型來使用。它們的效果相同。請注意,這些屬性會被「Normal」群組忽略。
font={font-name}
highlight-fontfont-name 是字型的名稱,就像它在 Vim 運行的系統上使用的名稱一樣。對於 X11,這是一個複雜的名稱,例如
font=-misc-fixed-bold-r-normal--14-130-75-75-c-70-iso8859-1
可以使用字型名稱「NONE」來還原為預設字型。當為「Normal」群組設定字型時,這會成為預設字型(直到變更
'guifont' 選項;使用最後設定的字型)。以下內容僅適用於 Motif,不適用於其他 GUI:當為「Menu」群組設定字型時,選單將會變更。當為「Tooltip」群組設定字型時,工具提示將會變更。除了 Menu 和 Tooltip 之外,所有使用的字型都應與預設字型具有相同的字元大小!否則會發生重繪問題。若要使用內嵌空格或其他特殊字元的字型名稱,請將其放在單引號中。單引號無法使用。範例
:hi comment font='Monospace 10'
guifg={color-name}
guifgguibg={color-name}
guibgguisp={color-name}
guisp這些指定要在 GUI 中使用的文字顏色(guifg)、背景顏色(guibg)和特殊顏色(guisp)。「guisp」用於各種底線。有一些特殊名稱:NONE 沒有顏色(透明)bg 使用正常背景顏色 background 使用正常背景顏色 fg 使用正常文字顏色 foreground 使用正常文字顏色 若要使用內嵌空格或其他特殊字元的顏色名稱,請將其放在單引號中。單引號無法使用。範例
:hi comment guifg='salmon pink'
gui-colors 建議的顏色名稱(這些在大多數系統上都可用):Red LightRed DarkRed Green LightGreen DarkGreen SeaGreen Blue LightBlue DarkBlue SlateBlue Cyan LightCyan DarkCyan Magenta LightMagenta DarkMagenta Yellow LightYellow Brown DarkYellow Gray LightGray DarkGray Black White Orange Purple Violet
定義 Nvim 預設配色方案的顏色:NvimDarkBlue NvimLightBlue NvimDarkCyan NvimLightCyan NvimDarkGray1 NvimLightGray1 NvimDarkGray2 NvimLightGray2 NvimDarkGray3 NvimLightGray3 NvimDarkGray4 NvimLightGray4 NvimDarkGreen NvimLightGreen NvimDarkMagenta NvimLightMagenta NvimDarkRed NvimLightRed NvimDarkYellow NvimLightYellow
您也可以透過 RGB(紅、綠、藍)值指定顏色。格式為「#rrggbb」,其中「rr」是紅色值,「gg」是綠色值,「bb」是藍色值。所有值都是十六進位,範圍從「00」到「ff」。範例
:highlight Comment guifg=#11f0c3 guibg=#ff00ff
對於 GUI,您可以使用以下群組來設定選單、捲軸和工具提示的顏色。它們沒有預設值。這不適用於 Win32 GUI。只有三個高亮顯示參數在這裡有作用:字型、guibg 和 guifg。
Menu 選單的目前字型、背景和前景顏色。也用於工具列。適用的高亮顯示參數:font、guibg、guifg。
hl-Tooltip 工具提示 工具提示的目前字型、背景和前景顏色。適用的高亮引數:font、guibg、guifg。
當您想要對數個語法群組使用相同的高亮時,可以更輕鬆地將這些群組連結到一個共同的高亮群組,並只為該群組設定顏色屬性。
設定連結
:hi[ghlight][!] [default] link {from-group}
{to-group}
移除連結
:hi[ghlight][!] [default] link {from-group}
NONE
注意事項: E414
如果 {from-group}
和/或 {to-group}
不存在,則會建立它們。您不會收到關於不存在群組的錯誤訊息。
一旦您對連結的群組使用 ":highlight" 命令,連結就會被移除。
如果 {from-group}
已經有高亮設定,則不會建立連結,除非給定了 '!'。對於來源檔案中的 ":highlight link" 命令,您不會收到錯誤訊息。這可以用來跳過已經有設定的群組的連結。
使用 [default] 對於覆蓋特定語法檔案的高亮特別有用。例如,C 語法檔案包含
:highlight default link cComment Comment
如果您喜歡 C 註解的 Question 高亮,請將此內容放入您的 vimrc 檔案中
:highlight link cComment Question
如果 C 語法檔案中沒有 "default",則在載入語法檔案時,高亮將會被覆蓋。
要讓連結在
:highlight clear
後仍然存在,如果您有特定檔案類型的高亮,並且想要在選擇其他色彩配置時保留它,請在 "after/syntax/{filetype}.vim" 檔案中放入類似這樣的命令
highlight! default link cComment Question
如果您想清除目前緩衝區的語法設定,可以使用此命令
:syntax clear
當您想要關閉語法高亮,或想要切換到使用其他語法時,應使用此命令。通常在語法檔案本身中不需要此命令,因為語法會在載入語法檔案的自動指令中被清除。該命令也會刪除 "b:current_syntax" 變數,因為在此命令之後不會載入任何語法。
清除目前緩衝區的特定語法群組
:syntax clear {group-name} ..
這會移除
{group-name}
的所有模式和關鍵字。
清除目前緩衝區的特定語法群組列表
:syntax clear @{grouplist-name} ..
這會將
{grouplist-name}
的內容設定為空列表。
:syntax-off :syn-off 如果您想要停用所有緩衝區的語法高亮,則需要移除載入語法檔案的自動指令
:syntax off
此命令實際執行的命令是
:source $VIMRUNTIME/syntax/nosyntax.vim
請參閱 "nosyntax.vim" 檔案以取得詳細資訊。請注意,要使其運作,$VIMRUNTIME 必須有效。請參閱
$VIMRUNTIME。
請注意,您在 vimrc 檔案中設定的語法顏色也將重設為其 Vim 預設值。請注意,如果您正在使用色彩配置,則色彩配置為語法高亮定義的顏色將會遺失。
請注意,當使用色彩配置時,您定義的顏色是否將被使用或使用配置中的顏色可能會有些混淆。這取決於色彩配置檔案。請參閱
:colorscheme。
如果您想要高亮檔案中的所有標籤,可以使用以下對應。
<F11>
-- 產生 tags.vim 檔案,並高亮標籤。
<F12>
-- 僅根據現有的 tags.vim 檔案高亮標籤。
:map <F11> :sp tags<CR>:%s/^\([^ :]*:\)\=\([^ ]*\).*/syntax keyword Tag \2/<CR>:wq! tags.vim<CR>/^<CR><F12>
:map <F12> :so tags.vim<CR>
警告: 標籤檔案越長,速度就會越慢,而且 Vim 將消耗更多記憶體。
僅高亮 typedefs、unions 和 structs 也可以完成。為此,您必須使用 Universal Ctags (
https://ctags.io) 或 Exuberant ctags。
將以下行放入您的 Makefile 中
# Make a highlight file for types. Requires Universal/Exuberant ctags and awk
types: types.vim
types.vim: *.[ch]
ctags --c-kinds=gstu -o- *.[ch] |\
awk 'BEGIN{printf("syntax keyword Type\t")}\
{printf("%s ", $$1)}END{print ""}' > $@
並將以下行放入您的 vimrc 中
" load the types.vim highlighting file, if it exists
autocmd BufRead,BufNewFile *.[ch] let fname = expand('<afile>:p:h') .. '/types.vim'
autocmd BufRead,BufNewFile *.[ch] if filereadable(fname)
autocmd BufRead,BufNewFile *.[ch] exe 'so ' .. fname
autocmd BufRead,BufNewFile *.[ch] endif
通常,緩衝區上的所有視窗都共用相同的語法設定。但是,可以將檔案上的特定視窗設定為擁有其自己的私有語法設定。一個可能的範例是在一個視窗中使用傳統高亮編輯 LaTeX 來源,同時在另一個視窗中看到相同來源以不同方式高亮(以便隱藏控制序列並指示粗體、斜體等區域)。
'scrollbind' 選項在此處很有用。
將目前視窗設定為擁有語法 "foo",與緩衝區上的所有其他視窗分開
:ownsyntax foo
一旦視窗擁有其自己的語法,從同一緩衝區上的其他視窗執行的語法命令(包括 :syntax clear)將不會產生任何影響。反之亦然,從該視窗執行的語法命令也不會影響同一緩衝區上的其他視窗。
當另一個緩衝區載入到該視窗或重新載入檔案時,具有自身語法的視窗會恢復為正常行為。分割視窗時,新視窗將會使用原始語法。
colortest.vim 為了測試您的顏色設定,Vim 發行版中包含一個檔案。要使用它,請執行此命令
:runtime syntax/colortest.vim
Nvim 盡可能使用 256 色和
真彩色 終端功能。
這是針對語法檔案的作者。
要找出哪些模式消耗的時間最多,請使用此順序取得概觀
:syntime on
[ redraw the text at least once with CTRL-L ]
:syntime report
這會顯示一個已使用語法模式的清單,依據將它們與文字比對所花費的時間排序。
:syntime on 開始測量語法時間。這將增加一些額外負擔來計算花在語法模式比對上的時間。
:syntime off 停止測量語法時間。
:syntime clear 將所有計數器設定為零,重新開始測量。
:syntime report 顯示自 ":syntime on" 以來在目前視窗中使用的語法項目。使用較寬的顯示畫面以查看更多輸出。
清單會依據總時間排序。各列為:TOTAL 此模式比對所花費的總時間(以秒為單位)。COUNT 模式使用的次數。MATCH 模式實際比對到的次數。SLOWEST 單次嘗試的最長時間。AVERAGE 單次嘗試的平均時間。NAME 語法項目的名稱。請注意,這不是唯一的。PATTERN 正在使用的模式。
當它必須嘗試許多替代方案時,模式比對會變慢。盡可能包含更多文字,以減少模式不比對的方式。
當使用 "\@<=" 和 "\@<!" 項目時,請新增最大大小,以避免在目前和上一行的所有位置嘗試。例如,如果項目是文字,請指定該文字的大小(以位元組為單位)
"<\@<=span" 比對 "<span" 中的 "span"。這會在許多地方嘗試比對 "<"。"<\@1<=span" 比對相同內容,但僅在 "span" 前面嘗試一個位元組。