使用VIM开发软件项目 - (9) 乱花渐欲迷人眼

本节所用命令的帮助入口:

 

看到标题,也许你就知道本文准备讲VIM的色彩机制了。

VIM并不是只有黑色两色。正相反,它提供了非常灵活的机制允许用户自定义色彩。运行在终端中的VIM,由于终端本身的限制,只能使用若干种固定的颜色;但对于GVIM来讲,你可以根据你的喜好调出任意的颜色。

首先,把下面的Ex命令加入你的vimrc,打开VIM的语法高亮功能:

 

这条命令,实际上是执行$VIMRUNTIME/syntax/syntax.vim脚本。如果你还没有打开文件类型检测功能,在这个脚本里会把它打开,因为要语法高亮,首先需要知道是什么文件类型。然后它会安装Filetype自动命令,在检测到文件类型时,设置syntax选项。而对syntax选项进行设置,又会触发Syntax自动命令,这条自动命令会在runtimepathsyntax子目录搜寻该类型的语法文件,并使用缺省的配色方案进行染色。

所谓语法文件,就是定义某种类型文件的语法。以C语言为例,它的语法文件定义了什么应该做为关键字来高亮,什么被做为注释来高亮,等等。VIM将根据语法文件的定义,把关键字以一种颜色高亮出来,把注释以另一种颜色高亮出来。具备使用什么样的颜色,则由配色方案(colorscheme)来决定,缺省使用default配色方案。

现在,你的世界已经亮起来了:注释、关键字、常数、字符串等等都以不同的颜色显示出来,读程序轻松多了。可是你不太喜欢default配色方案的设置,可不可以换用其它的配色方案呢?

当然没可以!如果你使用的是GVIM,在“编辑”菜单中选择“配色方案”,你就可以在多个配色方案中切换了。也可以使用colorscheme Ex命令来改变你的配色方案。例如,我喜欢的GUI配色方案是darkblue,因此我在vimrc中加入这样一句话:

 

这样,进入VIM之后,我所用的就是darkblue方案了。

http://www.vim.org上还有更多的配色方案,你可以在

http://www.vim.org/scripts/script.php?script_id=625

下载截止到20053月所有colorscheme的汇总,你可以在其中找到一个自己喜欢的。安装colorscheme时,只需要把它们拷贝到.vim/color目录下就行了。

有一个名为Color Scheme Explorer的插件,可以帮助你快速浏览你所安装的color scheme,在这里下载:

http://www.vim.org/scripts/script.php?script_id=1298

选择了喜欢的colorscheme后,在vimrc中加入一条colorscheme命令,以后VIM就会使用你选定的配色方案了。

如果对配色方案某些颜色不太满意,那么你可以在原来配色方案的基础上,修改其中的一些定义。例如,我把desert.vim拷到.vim/color目录,重命名为darkblue_my.vim。然后做如下更改(只列出改变的内容):

 

首先改变colors_nameVIM在某此情况会根据这个名字重新载入color scheme

接下来我重新设置了GUI的背景色,在前面的抓图中大家看到过这个颜色。

接下来的PmenuPmenuSel用来设置VIM下拉菜单的颜色,我们在lookupfile一文中看到过下拉菜单。

VIM 7中,当光标移到括号上时,VIM会高亮与之匹配的括号,所使用的颜色就是MatchParen,我在这里也更改这个颜色。

PmenuPmenuSel,以及MatchParen,都是VIM定义的缺省高亮组的名字,你可以用“:help highlight-groups”命令查看有这些高亮组及其含义。

如果你打算在终端及GUI界面中使用不同的colorscheme,可以这样设:

 

当然,这里的darkblue_mydesert_my都是我自已改过的colorscheme

VIM还提供了一个脚本,可以把你的文件按当前的颜色定义转化成HTML/XML文件,试试“:TOhtml”命令吧,更多信息请“:help 2html.vim”。

记得Source Insight中有一个功能,按SHIFT+F8可以把光标下的词高亮出来,在看代码时非常有用。VIM下也有一个插件可以完成此功能,而且比Source Insight的这个功能强大多了。

这个插件由Yuheng Xie所写,对这个插件有什么疑问,可以水木社区的VIM版找他http://www.newsmth.net/bbsdoc.php?board=VIM。在这里下载此插件:

http://www.vim.org/scripts/script.php?script_id=1238

把此插件直接拷贝到你的.vim/plugin目录就行了。

我在vimrc中这样设置:

 

这样,当我输入“,hl”时,就会把光标下的单词高亮,在此单词上按“,hh”会清除该单词的高亮。如果在高亮单词外输入“,hh”,会清除所有的高亮。

你也可以使用virsual模式选中一段文本,然后按“,hl”,会高亮你所选中的文本;或者你可以用“,hr”来输入一个正则表达式,这会高亮所有符合这个正则表达式的文本。

你可以在高亮文本上使用“,#”或“,*”来上下搜索高亮文本。在使用了“,#”或“,*”后,就可以直接输入“#”或“*”来继续查找该高亮文本,直到你又用“#”或“*”查找了其它文本。

 

如果你在启动VIM后重新执行了colorscheme命令,或者载入了会话文件,那么mark插件的颜色就会被清掉,解决的办法是重新source一下mark插件。或者像我一样,把mark插件定义的highlight组加入到你自己的colorscheme文件中。例如,把下面的语句加到desert_my.vimdarkblue_my.vim中:

 

不知道为什么,我的VIM 7.0在切换到其它缓冲区然后再切换回来时,原来被标记的文本会失去高亮。而作者说他并不存在此问题。如果你存在类似的问题,可以打上我所加的补丁:

 --- easwy/mark.vim    2006-12-01 13:02:18.000000000 +0800
+++ plugin/mark.vim    2007-03-23 10:22:02.000000000 +0800
@@ -440,6 +440,43 @@
     endif
 endfunction
 
+" easwy add
+" return the mark string under the cursor. multi-lines marks not supported
+function! <SID>RedoMarkWord()
+    " define variables if they don't exist
+    call s:InitMarkVariables()
+
+    let i = 1
+  while i <= g:mwCycleMax
+    if b:mwWord{i} != ""
+      " quote regexp with / etc. e.g. pattern => /pattern/
+      let quote = "/?~!@#$%^&*+-=,.:"
+      let j = 0
+      while j < strlen(quote)
+        if stridx(b:mwWord{i}, quote[j]) < 0
+          let quoted_regexp = quote[j] . b:mwWord{i} . quote[j]
+          break
+        endif
+        let j = j + 1
+      endwhile
+      if j >= strlen(quote)
+        return -1
+      endif
+
+      " highlight the word
+      exe "syntax clear MarkWord" . i
+      exe "syntax match MarkWord" . i . " " . quoted_regexp . " containedin=ALL"
+    endif
+    let i = i + 1
+  endwhile
+endfunction
+
+augroup markword
+  autocmd!
+  autocmd BufWinEnter * call <SID>RedoMarkWord()
+augroup END
+" easwy end
+
 " Restore previous 'cpo' value
 let &cpo = s:save_cpo
 

用法:

1. 保存该patch到某一目录,例如:/tmp/mark.vim.patch

2. cd到你的.vim目录:cd ~/.vim

3. 运行命令:cat /tmp/mark.vim.patch | patch -p0

[参考文档]

1. VIM帮助文件

2.  http://vimcdoc.sourceforge.net/

 

[尾记]

本文可以自由应用于非商业用途。转载请注明出处。

原文链接:http://blog.csdn.net/easwy

 
[
版本]

29mar07, easwy, v0.1, initial version   

"  For mark plugin
hi MarkWord1  ctermbg=Cyan     ctermfg=Black  guibg=#8CCBEA    guifg=Black
hi MarkWord2  ctermbg=Green    ctermfg=Black  guibg=#A4E57E    guifg=Black
hi MarkWord3  ctermbg=Yellow   ctermfg=Black  guibg=#FFDB72    guifg=Black
hi MarkWord4  ctermbg=Red      ctermfg=Black  guibg=#FF7272    guifg=Black
hi MarkWord5  ctermbg=Magenta  ctermfg=Black  guibg=#FFB3FF    guifg=Black
hi MarkWord6  ctermbg=Blue     ctermfg=Black  guibg=#9999FF    guifg=Black

    """"""""""""""""""""""""""""""
   " mark setting
   """"""""""""""""""""""""""""""
   nmap <silent> <leader>hl <Plug>MarkSet
   vmap <silent> <leader>hl <Plug>MarkSet
   nmap <silent> <leader>hh <Plug>MarkClear
   vmap <silent> <leader>hh <Plug>MarkClear
   nmap <silent> <leader>hr <Plug>MarkRegex
   vmap <silent> <leader>hr <Plug>MarkRegex

 " color scheme
if has("gui_running")
    colorscheme darkblue_my
else
    colorscheme desert_my
endif " has

 let colors_name = "darkblue_my"
hi Normal guifg=#c0c0c0 guibg=#294d4a ctermfg=gray ctermbg=black
......
"Omni menu colors
hi Pmenu guibg=#444444
hi PmenuSel ctermfg=7 ctermbg=4 guibg=#555555 guifg=#ffffff
" Matched brackets
hi MatchParen ctermfg=7 ctermbg=4

 colorscheme darkblue

 syntax enable

 :help syn-enable
:help :colorscheme
:help :highlight
:help highlight-groups
:help 2html.vim
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值