Vim 手記:語法高亮


本文覆蓋范圍:

  • 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的東西,有人寫了一整本關於編程的書,但我希望你從本教程可以掌握一些基礎知識並且探索更多知識。享受學習,這是一項你永遠不會后悔擁有的技能。

 

 

 

譯自此處


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM