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