如何在vim中轻松阅读代码

有时候在vim中阅读代码十分的方便,特别是阅读c/c++代码。通过一定的配置,可以使vim具有ide的阅读体验。

安装ctags和cscope

第一步安装vim需要的工具。ctags和cscope这是两个古老而又强大的为代码建立索引的工具,在redhat系列的linux系统下(例如:redhat,centos,fedra等)安装非常方便。

sudo yum install ctags
sudo yum install cscope

若还有问题,可以在网上查一下,一般都能解决。

创建自己的插件函数

创建一些常用的插件函数方便以后的映射。这些函数包括:查看函数定义,查看函数调用情况,查找字符串出现的地方,等等。下面我们就来创建这样的文件:
在/home/username/下建立一个文件夹 .vim/plugins 或 .vim/plugin(vim的版本不同,目录不同,一般是在.vim/plugin下),注意:是在用户的home目录下进行创建,而且是隐藏文件夹。

cs_search_string.vim

该文件的内容如下:

"cs search word func CS_Search_Word() let w = expand("<cword>") exe "cs f s" w exe "copen" endfunc " find the define func CS_Search_define()
    let w = expand("<cword>")
    exe "cs f g" w
    exe "copen"
endfunc

" find call what funcs func CS_Search_whatfunc() let w = expand("<cword>") exe "cs f d" w endfunc " find called func
func CS_Search_calledfunc()
    let w = expand("<cword>")
    exe "cs f c" w
endfunc


" find where file the func is func CS_Search_funcfiles() let w = expand("<cword>") exe "cs f i" w endfunc

search_word.vim

"search word func Search_Word() let w = expand("<cword>") exe "vimgrep" w "./**/*.c ./**/*.h" exe "copen" endfunc

创建.vimrc文件

在用户自己的home目录下创建自己的.vimrc文件。注意,以下文件是我的配置,你可以修改成你的配置,我在相关的映射上都加上了注释。该文件的内容如下:

set nu set tabstop=4 set et set fo-=r set noautoindent syntax on " 把光标放到一个函数上,按f5就可以打开该函数的定义窗口 map <F5> <C-w>] " 按f6关闭定义窗口 map <F6> <C-w>c " 按f4可以查看括号的匹配 map <F4> <S-%> " 在插入模式下输入zz,即可退出编辑状态 imap zz <Esc> set sw=4 "map <F2> :s/$/\= strftime(" %Y-%m-%d %H:%M:%S")<Enter> " 在光标所在行的末尾插入日期,这个可以按自己的需要去留 map <F2> :s/$/\= strftime(" %Y-%m-%d")<Enter> " 在项目级别查找单词所在的地方,并弹出窗口 map <F9> :call Search_Word()<CR> " 按<查看前一项内容 map < :cprevious<CR> " 按>查看后一项内容 map > :cnext<CR> " 只是查看函数被调用的地方,而不是字符串搜素 map <F7> :call CS_Search_Word()<CR> " 关闭弹出窗口 map <F8> :cclose<CR> if has("cscope") set csprg=/usr/bin/cscope set csto=0 set cst set nocsverb " add any database in current directory if filereadable("./cscope.out") cs add ./cscope.out " else add database pointed to by environment elseif $CSCOPE_DB != "" "if $CSCOPE_DB != "" cs add $CSCOPE_DB endif set csverb endif set cscopequickfix=e-,i-,s-,t- " 查看函数被调用的地方 map <F11> :call CS_Search_calledfunc()<CR> " 查看函数定义 map <F12> :call CS_Search_whatfunc()<CR> hi Comment ctermfg=6 set nocompatible "filetype indent on "set autoindent "set ic set hls "set lbr colorscheme delek

创建建立索引命令

需要建立索引时可以通过ctags命令和cscope命令单独建立,我这里自己写了一个脚本,用起来比较方便。该脚本叫:ctcs。脚本创建完成后,把脚本放到/usr/local/bin/下即可。

#!/bin/bash
#
# ctcs

star()
{
    ctags -R *   
    if [ $? -eq 0 ]; then
        echo "ctags successfully!"
    fi  
    cscope -qbR 
    if [ $? -eq 0 ]; then
        echo "cscope successfully!"
    fi  
}

del()
{
    if [ -f tags -o -f cscope.out -o -f cscope.po.out -o -f cscope.in.out ]; then
        rm -f tags  && echo "clean tags ok!"
        rm -f cscope.* && echo "clean cscope.* files ok!"
    fi  
}

case "$1" in
    -r) 
        del 
        star
        ;;  
    -d) 
        del 
        ;;  
    *)  
        echo "usage : ctcs -r|-d"   
        exit 1
esac

exit 0

如何使用

(1) 进入项目源码根目录
(2) 执行ctcs -r命令
(3) vim xxx.c
(4) 把光标放到一个函数上,按f7试一试,是否能看到函数被调用的列表

$ cd redis-4.0.1
$ ctcs -r
$ vim src/server.c
相关文章
相关标签/搜索