每個程序員的文本編輯器缺少了語法高亮、特殊關(guān)鍵字和短語著色,都是不完整的。語法高亮突出了文檔的結(jié)構(gòu),幫助發(fā)現(xiàn)排字錯誤,利于調(diào)試,整體上讓文本編輯更輕松更有效率。本篇我們將探討一下Vim的語法高亮范式以及如何建立和定制著色方案。
Vim著色方案:
首先說明,本文談?wù)摰牟皇悄姆N顏色最好,而是Vim如何處理語法高亮的問題。
在決定如何給一個文件著色時,Vim首先將文件分解成若干結(jié)構(gòu)組。這些都是通過編寫好的語法命令文件來實現(xiàn),這些文件在Vim加載一個文件的時候就自動加載了,加載過程則是基于一系列復(fù)雜規(guī)則。如果Vim選擇了一個錯誤的語法命令文件,你可以通過以下命令手工指定一個正確的文件:
:set syn=syntax-type
其中syntax-type是一個文件的類型。通常文件類型就是文件擴展名,例如選擇PHP語法高亮,則將syntax-type設(shè)置為“php”。
Vim主要使用以下九種高亮分組:
復(fù)制代碼
Comment : 注釋
Constant : 常量,例如數(shù)字、引號內(nèi)字符串、布爾值。
Identifier : 變量標識符名稱。
Statement : 編程語言的聲明,一般是像“if”或“while”這樣的關(guān)鍵字。
PreProc : 預(yù)處理,例如C語言中的“#include”。
Type : 變量類型,例如“int”。
Special : 特殊符號,通常是類似字符串中的“\n”。
Underlined : 文本下劃線。
Error : 顯示編程語言錯誤的文本。
另外還有一個分組叫做Normal,表示普通文本。
也許你已經(jīng)注意到,這些高亮分組主要針對編程語言,這是因為語法高亮對它們最有用。但是,Vim的高亮命令覆蓋的文件類型遠超過編程語言,包括從HTML到EMAIL的任何東西。
Vim還支持三種輸出設(shè)備:black-and-white terminal(黑白終端),color terminal(彩色終端)和GUI(圖形化的用戶接口)。因為它們每一個都有自己獨特的高亮能力,Vim為它們維護了三個獨立的高亮方案。
建立高亮:
實現(xiàn)高亮的最簡便方式就是使用別人寫好的.vimrc文件,就像這個。大多數(shù)時候這樣做都挺好使。但是,如果它不好使或者你想從頭開始,以下就是告訴你如何從頭開始。
你必須在你的.vimrc文件的第一行寫入:
syntax on
這行命令告訴Vim開始使用語法高亮。如果你暫時不想改動文件,你也可以在Vim窗口輸入它作為一行命令。
如果你正在使用黑白終端或者GUI接口,一切都工作得剛剛好。如果你正在使用一個支持彩色的終端,你也許不得不將以下命令置于syntax on上一行:
set term=ansi
你也可以嘗試一下color_xterm來代替ansi。
選擇顏色:
Vim有一套默認顏色方案,在我看來,有點過度明亮和混亂(注釋和變量顏色是一樣的)。但是每個人都有一套自己的顏色偏好,因此你可能會很想了解如何改變它的色彩來符合自己的口味。
Vim著色使用:highlight和:hi命令。:hi命令實際上是多用途命令,它負責(zé)許多例行著色,我們僅用它的顏色選擇功用。它具有以下語法:
:hi Group key=value ...
Group就是前面所說的9個高亮分組名。
key-value鍵值對規(guī)定了不同輸出終端的高亮值。這里有三個基本鍵名:term、cterm和gui,代表著黑白終端、彩色終端和圖形界面。除了term以外,另外兩個基本鍵還有兩個擴展鍵名base-namefg和base-namebg,分別代表對應(yīng)終端的前景和背景顏色;炬I只能擁有非色彩的高亮值,例如加粗和下劃線。
以下是一些高亮鍵和它們可能的值:
term/cterm/gui: bold, underline, reverse, italic, none
ctermfg/ctermbg: red, yellow, green , blue, magenta, cyan, white, blcak, gray
guifg/guibg: 以上所有顏色,而且還可以使用#rrggbb格式色彩。
例如,我想高亮我的預(yù)處理聲明為bright magenta,可以使用如下命令:
:hi PreProc ctermfg=magenta cterm=bold guifg=#FF00FF
注意,我可以在一行中使用多個鍵值對,他們都會應(yīng)用于同一個高亮分組。
通常來說,只要你喜歡一個著色方案,你可以將它設(shè)置在你的~/.vimrc文件中,Vim會自動將其加載。
語法高亮除錯:
Vim的語法高亮偶爾也存在一些小問題,我就經(jīng)常遭遇到其中的三個。
沒有彩色,只有黑白終端高亮。
導(dǎo)致這種情況的最常見的原因是Vim無法確定終端是否具備彩色能力。要修復(fù)它,首先確保在.vimrc文件第一行設(shè)置了term=ansi,一定要在syntax on所在行之前。另外還要在shell中將環(huán)境變量TERM設(shè)置為color_xterm和color-xterm。
顏色有了,但不是我想要的。
這常發(fā)生在你試圖修改別人的.vimrc文件以為己用的時候。有時,你只需要將自己的色彩定義全部放到文件的底部去就可以修復(fù)。如果不奏效的話,檢查所有可疑的代碼,然后將它們注釋。(注釋方法為在行首添加雙引號)
滾屏?xí)r顏色亂成一團
Vim在確定高亮法則的時候使用多種探索方法來節(jié)約時間,有時這會造成一些故障。查看:h syn-sync可以得到更多細節(jié)。要修復(fù)這個,你可使用以下命令:
syn sync minlines=1000
你也可以在.vimrc文件中設(shè)置更大的數(shù)值。在Vim 6.0及以上版本,你可以使用以下命令:
syn sync fromstart
該命令強制高亮引擎從文件第一行開始解析文件,這對大文件而言會很慢,但它可以確保色彩準確度。
此時此刻,如果你習(xí)慣了使用Vim,并且你已經(jīng)鼓搗了一陣它的配置,發(fā)現(xiàn)一些你喜歡的特性,恭喜你,你現(xiàn)在是一個Vim User了。當然,在本教程中我還會教更多的關(guān)于Vim的東西,有人寫了一整本關(guān)于編程的書,但我希望你從本教程可以掌握一些基礎(chǔ)知識并且探索更多知識。享受學(xué)習(xí),這是一項你永遠不會后悔擁有的技能。