自己動手擴充套件vim外掛——配色篇

凝霜發表於2012-10-30

自己動手擴充套件vim外掛——配色篇

By 馬冬亮(凝霜  Loki)

一個人的戰爭(http://blog.csdn.net/MDL13412)

本文背景

用過功能稍微完善一點的編輯器的朋友都知道,可以在設定中自定義字型顏色、背景顏色、關鍵字顏色等,從而提升我們的開發效率。而對於vim這樣的編輯器來說,當然少不了這些功能,不但如此,在下文我將給大家展示其他編輯器所望塵莫及的靈活性。

vimcolorschemetest站點上,有數以千計的vim主題外掛,然而每款主題或多或少都有我們不滿意的地方,這就需要我們自己動手來進行擴充套件。本文就是我在定製vim主題時的一些經驗心得,特此分享給廣大vimer.

基礎知識

  • 在vim中,主題也是以外掛形式存在的。其中系統自帶的主題,存放在$VIMRUNTIME/colors資料夾下,以*.vim命名。(注:檢視$VIMRUNTIME請在vim中執行 :echo $VIMRUNTIME
  • 使用者自定義的主題一般不放在系統目錄下,而是放在~/.vim/colors目錄下,這樣不會干擾到其他使用者,同時也方便備份自己的vim配置。
  • 更換vim主題的命令為:

:colorscheme 主題外掛名稱
  • 但是這樣只能臨時改變vim主題,退出後又會恢復原樣,如果想永久改變,請在~/.vimrc中新增:

colorscheme 主題外掛名稱

準備工作

由於我不使用Windows下的gvim,而是在linux下或遠端ssh使用終端下的vim,因此首先需要在~/.vimrc中新增開啟256顏色支援:

set t_Co=256

為了能在編輯程式時高亮顯示關鍵字,還需要在~/.vimrc中開啟語法高亮顯示:

syntax enable
syntax on 
做完上述的準備工作後,讓我們正式開始定製主題之旅吧!

定製主題

主題色調

在配置其他屬性前,首先要配置主題整體的色調,只有兩個選擇:dark和light(暗色調和亮色調)。對於經常閱讀和編寫程式碼的程式設計師來說,暗色調是更好的選擇:

set background=dark
接下來,需要重新設定一下語法高亮,否則設定不會生效:

if version > 580
    hi clear
    if exists("syntax_on")
        syntax reset
    endif
endif

主題名稱

主題名稱是無引數呼叫 :colorscheme 時返回的資訊,用於分辨不同主題,其設定如下:

let g:colors_name="nslib_color256"

基礎屬性

由於vim可以在黑白終端、彩色終端、GUI介面下執行,所以需要對其分貝進行配置,下面給出一個簡要的文件說明:

term         黑白終端的屬性
cterm        彩色終端的屬性
ctermfg      彩色終端前景色
ctermbg      彩色終端背景色
gui          GUI屬性
guifg        GUI前景色
guibg        GUI背景色
對於黑白終端,我們沒有配置的必要,因此主要的配置工作集中在彩色終端與GUI介面上,又由於彩色終端與GUI介面的配置只是關鍵字不同,因此這裡只選取彩色終端進行說明。

由於不是所有終端都支援256色,因此使用一些安全色會使我們的主題更有移植性,而GUI可以支援所有顏色,不在考慮範圍之內,vim文件給出的安全色如下:

"0      Black  
"1      DarkBlue  
"2      DarkGreen        
"3      DarkCyan 
"4      DarkRed
"5      DarkMagenta        
"6      Brown, DarkYellow            
"7      LightGray, LightGrey, Gray, Grey                   
"8      DarkGray, DarkGrey   
"9      Blue, LightBlue     
"10     Green, LightGreen          
"11     Cyan, LightCyan                    
"12     Red, LightRed                         
"13     Magenta, LightMagenta 
"14     Yellow, LightYellow   
"15     White     

配色語法

下面舉例說明配色語法:

hi Type             ctermfg=LightYellow     ctermbg=Black           cterm=bold
其中,hihighlight命令的縮寫,用於高亮配置;Type是要配色的元素名稱;引數採用的是Key=Value的形式。

元素列表

配置顏色的語法非常簡單,無需累贅,下面將分類介紹常用的元素標籤:

狀態列提示資訊

hi StatusLine       狀態列
hi StatusLineNC     非當前視窗的狀態列
ErrorMsg            錯誤資訊
WarningMsg          警告資訊
ModeMsg             當前模式
MoreMsg             其他文字
Question            詢問使用者
Error               錯誤

文字搜尋

hi IncSearch        增量搜尋時匹配的文字符串
hi Search           匹配的文字串

彈出選單
Pmenu               彈出選單
PmenuSel            選單當前選擇項
窗體邊框相關

VertSplit           垂直分割視窗的邊框
LineNr              行號
Cursor              游標所在字元
CursorLine          游標所在行
ColorColumn         游標所在列
ColorColumn         標尺
NonText             視窗尾部的~和@,以及文字里實際不顯示的字元

diff模式
DiffAdd             diff模式增加的行
DiffChange          diff模式改變的行
DiffDelete          diff模式刪除的行
DiffText            diff模式插入文字
C/C++語法
Comment             註釋
PreProc             預處理
Type                資料型別
Constant            常量
Statement           控制語句
Special             字串中的中的特殊字元
String              字串
cCppString          Cpp字串
Number              數字
Todo                TODO、HACK、FIXME等標籤

我的主題

截圖


配置檔案

set background=dark


if version > 580
    hi clear
    if exists("syntax_on")
        syntax reset
    endif
endif


let g:colors_name="nslib_color256"
  
hi Normal               ctermfg=Grey            ctermbg=Black       
hi ColorColumn          ctermfg=White           ctermbg=Grey
                                               ·
hi ErrorMsg             term=standout           
hi ErrorMsg             ctermfg=LightBlue       ctermbg=DarkBlue    
hi WarningMsg           term=standout           
hi WarningMsg           ctermfg=LightBlue       ctermbg=DarkBlue    
hi ModeMsg              term=bold               cterm=bold          
hi ModeMsg              ctermfg=LightBlue       ctermbg=Black       
hi MoreMsg              term=bold               ctermfg=LightGreen  
hi MoreMsg              ctermfg=LightBlue       ctermbg=Black       
hi Question             term=standout           gui=bold
hi Question             ctermfg=LightBlue       ctermbg=Black       
hi Error                term=bold               cterm=bold          
hi Error                ctermfg=LightBlue       ctermbg=Black       
                                               ·
hi LineNr               ctermfg=LightBlue       ctermbg=Black       
hi CursorColumn         ctermfg=White           ctermbg=Grey        
hi CursorLine           ctermfg=LightBlue       ctermbg=Black       
hi ColorColumn          ctermfg=White           ctermbg=Grey        
                                               ·
hi IncSearch            ctermfg=Black           ctermbg=DarkGrey    
hi Search               ctermfg=Black           ctermbg=DarkGrey    
hi StatusLine           term=bold               cterm=bold          
hi StatusLine           ctermfg=Black           ctermbg=Grey        
hi StatusLineNC         term=bold               cterm=bold          
hi StatusLineNC         ctermfg=Black           ctermbg=Grey        
                                               ·
hi VertSplit            ctermfg=Grey            ctermbg=Grey        
hi Visual               term=bold               cterm=bold          
hi Visual               ctermfg=Black           ctermbg=Grey        
                                               ·
highlight Pmenu         ctermfg=Black           ctermbg=Grey      
highlight PmenuSel      ctermfg=LightBlue       ctermbg=DarkBlue  
            ·
hi Comment              ctermfg=DarkCyan        ctermbg=Black
hi PreProc              ctermfg=Blue            ctermbg=Black
hi Type                 ctermfg=LightYellow     ctermbg=Black           cterm=bold
hi Constant             ctermfg=Blue            ctermbg=Black           cterm=bold
hi Statement            ctermfg=LightYellow     ctermbg=Black           cterm=bold
hi Special              ctermfg=Red             ctermbg=Black           cterm=bold
hi SpecialKey           ctermfg=Red             ctermbg=Black           cterm=bold
hi Number               ctermfg=Blue            ctermbg=Black
hi cCppString           ctermfg=Red             ctermbg=Black
hi String               ctermfg=Red             ctermbg=Black
hi Identifier           ctermfg=Red             ctermbg=Black           cterm=bold
hi Todo                 ctermfg=Black           ctermbg=Gray            cterm=bold
hi NonText              ctermfg=LightBlue       ctermbg=Black
hi Directory            ctermfg=Blue            ctermbg=Black
hi Folded               ctermfg=DarkBlue        ctermbg=Black           cterm=bold
hi FoldColumn           ctermfg=LightBlue       ctermbg=Black
hi Underlined           ctermfg=LightBlue       ctermbg=Black           cterm=underline
hi Title                ctermfg=LightBlue       ctermbg=Black
hi Ignore               ctermfg=LightBlue       ctermbg=Black


hi Directory            ctermfg=LightBlue       ctermbg=Black
hi browseSynopsis       ctermfg=LightBlue       ctermbg=Black
hi browseCurDir         ctermfg=LightBlue       ctermbg=Black
hi favoriteDirectory    ctermfg=LightBlue       ctermbg=Black
hi browseDirectory      ctermfg=LightBlue       ctermbg=Black
hi browseSuffixInfo     ctermfg=LightBlue       ctermbg=Black
hi browseSortBy         ctermfg=LightBlue       ctermbg=Black
hi browseFilter         ctermfg=LightBlue       ctermbg=Black
hi browseFiletime       ctermfg=LightBlue       ctermbg=Black
hi browseSuffixes       ctermfg=LightBlue       ctermbg=Black


hi TagListComment       ctermfg=LightBlue       ctermbg=Black
hi TagListFileName      ctermfg=LightBlue       ctermbg=Black
hi TagListTitle         ctermfg=LightBlue       ctermbg=Black
hi TagListTagScope      ctermfg=LightBlue       ctermbg=Black
hi TagListTagName       ctermfg=LightBlue       ctermbg=Black
hi Tag                  ctermfg=LightBlue       ctermbg=Black

總結

vim的靈活性極強,可以配置其他編輯器無法配置的選項,很適合我這種喜歡折騰的人:-)

相關文章