2011年1月26日星期三

config & hack vim CCTree

这段时间在用 vim 看代码,虽然已经配置好 cscope,但当要查看函数调用图时,还是不大方便,经 google 后得知 CCTree 这个很好的插件。
CCTree 的安装其实很简单,只需下载并将其保存到 .vim/plugin(linux/unix 环境下)就可以使用了,完全不需额外配置。CCTree 的使用方法请查看其官方网站(需翻墙,不过一般能看到这个博客,就表明你已经翻墙了)上的帮助。这个本文暂且不提。
在使用 CCTree 的过程中,发觉 CCTree-Preview 窗口的 highlight 和自己 vim 的 colorscheme(desert) 配合的不是很好。于是在 .vimrc 上加入了下面配置:
" cctree highlight setting
highlight CCTreeHiSymbol  gui=bold guifg=yellow guibg=darkblue ctermfg=yellow ctermbg=darkblue
highlight CCTreeHiMarkers  gui=bold guifg=yellow guibg=darkblue ctermfg=yellow ctermbg=darkblue
highlight Ignore ctermfg=black guifg=bg

还有一些方便使用的配置:
" cctree cscopedb
let g:CCTreeCscopeDb = "cscope.out"
" 设置这个之后在敲完命令 CCTreeLoadDB 之后回车就会自动选上 cscope.out

" set updatetime
set updatetime=0
" 设置这个之后,光标移动时,CCTree-Preview 里面的内容才会实时进行语法加亮

本来以为设置完 updatetime 就可以很方便的使用 CCTree 了,这时发现,一旦设置了 updatetime,当 CCTree-Preview 里面的内容被加亮之后,就无法使用 CCTreeLoadBufferUsingTag(快捷键为 <CR>,即回车)这个命令了,但仍旧可以使用 CCTreePreviewBufferUsingTag(快捷键为 <Ctrl+p>)。
查看 cctree.vim 后发现,函数 s:CCTreeLoadBufferFromKeyword 和 s:CCTreePreviewBufferFromKeyword 在调用函数 s:CCTreeGetCurrentKeyword 上有些不同。在将 s:CCTreeLoadBufferFromKeyword 中的调用方式改成和 s:CCTreePreviewBufferFromKeyword 的一样后,就可以在 CCTree-Preview 里正常使用回车进行跳转了。
修改方式如下:
将位于function! s:CCTreeLoadBufferFromKeyword中的
if s:CCTreeGetXCurrentKeyworkd() == -1
   return
endif
替换成
call s:CCTreeGetCurrentKeyword()
if s:CCTreekeyword == ''
   return
endif
大功告成!

没有评论: