文章目錄
- 本文背景
- 基礎知識
- 準備工作
- 定製主題
- 我的主題
- 總結
自己動手擴充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 enablesyntax on
做完上述的準備工作後,讓我們正式開始定製主題之旅吧!
定製主題
主題色調
在配置其他屬性前,首先要配置主題整體的色調,只有兩個選擇:dark和light(暗色調和亮色調)。對於經常閱讀和編寫代碼的程式員來說,暗色調是更好的選擇:
set background=dark
接下來,需要重新設定一下文法高亮,否則設定不會生效:
if version > 580 hi clear if exists("syntax_on") syntax reset endifendif
主題名稱
主題名稱是無參數調用 :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
其中,hi是highlight命令的縮寫,用於高亮配置;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=darkif version > 580 hi clear if exists("syntax_on") syntax reset endifendiflet 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=boldhi 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=Blackhi PreProc ctermfg=Blue ctermbg=Blackhi Type ctermfg=LightYellow ctermbg=Black cterm=boldhi Constant ctermfg=Blue ctermbg=Black cterm=boldhi Statement ctermfg=LightYellow ctermbg=Black cterm=boldhi Special ctermfg=Red ctermbg=Black cterm=boldhi SpecialKey ctermfg=Red ctermbg=Black cterm=boldhi Number ctermfg=Blue ctermbg=Blackhi cCppString ctermfg=Red ctermbg=Blackhi String ctermfg=Red ctermbg=Blackhi Identifier ctermfg=Red ctermbg=Black cterm=boldhi Todo ctermfg=Black ctermbg=Gray cterm=boldhi NonText ctermfg=LightBlue ctermbg=Blackhi Directory ctermfg=Blue ctermbg=Blackhi Folded ctermfg=DarkBlue ctermbg=Black cterm=boldhi FoldColumn ctermfg=LightBlue ctermbg=Blackhi Underlined ctermfg=LightBlue ctermbg=Black cterm=underlinehi Title ctermfg=LightBlue ctermbg=Blackhi Ignore ctermfg=LightBlue ctermbg=Blackhi Directory ctermfg=LightBlue ctermbg=Blackhi browseSynopsis ctermfg=LightBlue ctermbg=Blackhi browseCurDir ctermfg=LightBlue ctermbg=Blackhi favoriteDirectory ctermfg=LightBlue ctermbg=Blackhi browseDirectory ctermfg=LightBlue ctermbg=Blackhi browseSuffixInfo ctermfg=LightBlue ctermbg=Blackhi browseSortBy ctermfg=LightBlue ctermbg=Blackhi browseFilter ctermfg=LightBlue ctermbg=Blackhi browseFiletime ctermfg=LightBlue ctermbg=Blackhi browseSuffixes ctermfg=LightBlue ctermbg=Blackhi TagListComment ctermfg=LightBlue ctermbg=Blackhi TagListFileName ctermfg=LightBlue ctermbg=Blackhi TagListTitle ctermfg=LightBlue ctermbg=Blackhi TagListTagScope ctermfg=LightBlue ctermbg=Blackhi TagListTagName ctermfg=LightBlue ctermbg=Blackhi Tag ctermfg=LightBlue ctermbg=Black
總結
vim的靈活性極強,可以配置其他編輯器無法配置的選項,很適合我這種喜歡折騰的人:-)