自己动手扩展vim插件——配色篇

来源:互联网 发布:php 门户系统 编辑:程序博客网 时间:2024/06/11 21:11

自己动手扩展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主题的命令为:

[plain] view plaincopyprint?
  1. :colorscheme 主题插件名称  
  • 但是这样只能临时改变vim主题,退出后又会恢复原样,如果想永久改变,请在~/.vimrc中添加:

[plain] view plaincopyprint?
  1. colorscheme 主题插件名称  

准备工作

由于我不使用Windows下的gvim,而是在linux下或远程ssh使用终端下的vim,因此首先需要在~/.vimrc中添加开启256颜色支持:

[plain] view plaincopyprint?
  1. set t_Co=256  

为了能在编辑程序时高亮显示关键字,还需要在~/.vimrc中开启语法高亮显示:

[plain] view plaincopyprint?
  1. syntax enable  
  2. syntax on   
做完上述的准备工作后,让我们正式开始定制主题之旅吧!

定制主题

主题色调

在配置其他属性前,首先要配置主题整体的色调,只有两个选择:dark和light(暗色调和亮色调)。对于经常阅读和编写代码的程序员来说,暗色调是更好的选择:

[plain] view plaincopyprint?
  1. set background=dark  
接下来,需要重新设置一下语法高亮,否则设置不会生效:

[plain] view plaincopyprint?
  1. if version > 580  
  2.     hi clear  
  3.     if exists("syntax_on")  
  4.         syntax reset  
  5.     endif  
  6. endif  

主题名称

主题名称是无参数调用 :colorscheme 时返回的信息,用于分辨不同主题,其设置如下:

[plain] view plaincopyprint?
  1. let g:colors_name="nslib_color256"  

基础属性

由于vim可以在黑白终端、彩色终端、GUI界面下运行,所以需要对其分贝进行配置,下面给出一个简要的文档说明:

[plain] view plaincopyprint?
  1. term         黑白终端的属性  
  2. cterm        彩色终端的属性  
  3. ctermfg      彩色终端前景色  
  4. ctermbg      彩色终端背景色  
  5. gui          GUI属性  
  6. guifg        GUI前景色  
  7. guibg        GUI背景色  
对于黑白终端,我们没有配置的必要,因此主要的配置工作集中在彩色终端与GUI界面上,又由于彩色终端与GUI界面的配置只是关键字不同,因此这里只选取彩色终端进行说明。

由于不是所有终端都支持256色,因此使用一些安全色会使我们的主题更有移植性,而GUI可以支持所有颜色,不在考虑范围之内,vim文档给出的安全色如下:

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

配色语法

下面举例说明配色语法:

[plain] view plaincopyprint?
  1. hi Type             ctermfg=LightYellow     ctermbg=Black           cterm=bold  
其中,hihighlight命令的缩写,用于高亮配置;Type是要配色的元素名称;参数采用的是Key=Value的形式。

元素列表

配置颜色的语法非常简单,无需累赘,下面将分类介绍常用的元素标签:

状态栏提示信息

[plain] view plaincopyprint?
  1. hi StatusLine       状态栏  
  2. hi StatusLineNC     非当前窗口的状态栏  
  3. ErrorMsg            错误信息  
  4. WarningMsg          警告信息  
  5. ModeMsg             当前模式  
  6. MoreMsg             其他文本  
  7. Question            询问用户  
  8. Error               错误  

文本搜索

[plain] view plaincopyprint?
  1. hi IncSearch        增量搜索时匹配的文本符串  
  2. hi Search           匹配的文本串  

弹出菜单
[plain] view plaincopyprint?
  1. Pmenu               弹出菜单  
  2. PmenuSel            菜单当前选择项  
窗体边框相关

[plain] view plaincopyprint?
  1. VertSplit           垂直分割窗口的边框  
  2. LineNr              行号  
  3. Cursor              光标所在字符  
  4. CursorLine          光标所在行  
  5. ColorColumn         光标所在列  
  6. ColorColumn         标尺  
  7. NonText             窗口尾部的~和@,以及文本里实际不显示的字符  

diff模式
[plain] view plaincopyprint?
  1. DiffAdd             diff模式增加的行  
  2. DiffChange          diff模式改变的行  
  3. DiffDelete          diff模式删除的行  
  4. DiffText            diff模式插入文本  
C/C++语法
[plain] view plaincopyprint?
  1. Comment             注释  
  2. PreProc             预处理  
  3. Type                数据类型  
  4. Constant            常量  
  5. Statement           控制语句  
  6. Special             字符串中的中的特殊字符  
  7. String              字符串  
  8. cCppString          Cpp字符串  
  9. Number              数字  
  10. Todo                TODO、HACK、FIXME等标签  

我的主题

截图


配置文件

[plain] view plaincopyprint?
  1. set background=dark  
  2.   
  3.   
  4. if version > 580  
  5.     hi clear  
  6.     if exists("syntax_on")  
  7.         syntax reset  
  8.     endif  
  9. endif  
  10.   
  11.   
  12. let g:colors_name="nslib_color256"  
  13.     
  14. hi Normal               ctermfg=Grey            ctermbg=Black         
  15. hi ColorColumn          ctermfg=White           ctermbg=Grey  
  16.                                                ·  
  17. hi ErrorMsg             term=standout             
  18. hi ErrorMsg             ctermfg=LightBlue       ctermbg=DarkBlue      
  19. hi WarningMsg           term=standout             
  20. hi WarningMsg           ctermfg=LightBlue       ctermbg=DarkBlue      
  21. hi ModeMsg              term=bold               cterm=bold            
  22. hi ModeMsg              ctermfg=LightBlue       ctermbg=Black         
  23. hi MoreMsg              term=bold               ctermfg=LightGreen    
  24. hi MoreMsg              ctermfg=LightBlue       ctermbg=Black         
  25. hi Question             term=standout           gui=bold  
  26. hi Question             ctermfg=LightBlue       ctermbg=Black         
  27. hi Error                term=bold               cterm=bold            
  28. hi Error                ctermfg=LightBlue       ctermbg=Black         
  29.                                                ·  
  30. hi LineNr               ctermfg=LightBlue       ctermbg=Black         
  31. hi CursorColumn         ctermfg=White           ctermbg=Grey          
  32. hi CursorLine           ctermfg=LightBlue       ctermbg=Black         
  33. hi ColorColumn          ctermfg=White           ctermbg=Grey          
  34.                                                ·  
  35. hi IncSearch            ctermfg=Black           ctermbg=DarkGrey      
  36. hi Search               ctermfg=Black           ctermbg=DarkGrey      
  37. hi StatusLine           term=bold               cterm=bold            
  38. hi StatusLine           ctermfg=Black           ctermbg=Grey          
  39. hi StatusLineNC         term=bold               cterm=bold            
  40. hi StatusLineNC         ctermfg=Black           ctermbg=Grey          
  41.                                                ·  
  42. hi VertSplit            ctermfg=Grey            ctermbg=Grey          
  43. hi Visual               term=bold               cterm=bold            
  44. hi Visual               ctermfg=Black           ctermbg=Grey          
  45.                                                ·  
  46. highlight Pmenu         ctermfg=Black           ctermbg=Grey        
  47. highlight PmenuSel      ctermfg=LightBlue       ctermbg=DarkBlue    
  48.             ·  
  49. hi Comment              ctermfg=DarkCyan        ctermbg=Black  
  50. hi PreProc              ctermfg=Blue            ctermbg=Black  
  51. hi Type                 ctermfg=LightYellow     ctermbg=Black           cterm=bold  
  52. hi Constant             ctermfg=Blue            ctermbg=Black           cterm=bold  
  53. hi Statement            ctermfg=LightYellow     ctermbg=Black           cterm=bold  
  54. hi Special              ctermfg=Red             ctermbg=Black           cterm=bold  
  55. hi SpecialKey           ctermfg=Red             ctermbg=Black           cterm=bold  
  56. hi Number               ctermfg=Blue            ctermbg=Black  
  57. hi cCppString           ctermfg=Red             ctermbg=Black  
  58. hi String               ctermfg=Red             ctermbg=Black  
  59. hi Identifier           ctermfg=Red             ctermbg=Black           cterm=bold  
  60. hi Todo                 ctermfg=Black           ctermbg=Gray            cterm=bold  
  61. hi NonText              ctermfg=LightBlue       ctermbg=Black  
  62. hi Directory            ctermfg=Blue            ctermbg=Black  
  63. hi Folded               ctermfg=DarkBlue        ctermbg=Black           cterm=bold  
  64. hi FoldColumn           ctermfg=LightBlue       ctermbg=Black  
  65. hi Underlined           ctermfg=LightBlue       ctermbg=Black           cterm=underline  
  66. hi Title                ctermfg=LightBlue       ctermbg=Black  
  67. hi Ignore               ctermfg=LightBlue       ctermbg=Black  
  68.   
  69.   
  70. hi Directory            ctermfg=LightBlue       ctermbg=Black  
  71. hi browseSynopsis       ctermfg=LightBlue       ctermbg=Black  
  72. hi browseCurDir         ctermfg=LightBlue       ctermbg=Black  
  73. hi favoriteDirectory    ctermfg=LightBlue       ctermbg=Black  
  74. hi browseDirectory      ctermfg=LightBlue       ctermbg=Black  
  75. hi browseSuffixInfo     ctermfg=LightBlue       ctermbg=Black  
  76. hi browseSortBy         ctermfg=LightBlue       ctermbg=Black  
  77. hi browseFilter         ctermfg=LightBlue       ctermbg=Black  
  78. hi browseFiletime       ctermfg=LightBlue       ctermbg=Black  
  79. hi browseSuffixes       ctermfg=LightBlue       ctermbg=Black  
  80.   
  81.   
  82. hi TagListComment       ctermfg=LightBlue       ctermbg=Black  
  83. hi TagListFileName      ctermfg=LightBlue       ctermbg=Black  
  84. hi TagListTitle         ctermfg=LightBlue       ctermbg=Black  
  85. hi TagListTagScope      ctermfg=LightBlue       ctermbg=Black  
  86. hi TagListTagName       ctermfg=LightBlue       ctermbg=Black  
  87. hi Tag                  ctermfg=LightBlue       ctermbg=Black  

总结

vim的灵活性极强,可以配置其他编辑器无法配置的选项,很适合我这种喜欢折腾的人:-)

 

原创粉丝点击