如何在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("")
    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("")
    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("")
    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  ]
" 按f6关闭定义窗口
map  c
" 按f4可以查看括号的匹配
map  
" 在插入模式下输入zz,即可退出编辑状态
imap zz 
set sw=4
"map  :s/$/\=   strftime("    %Y-%m-%d %H:%M:%S")
" 在光标所在行的末尾插入日期,这个可以按自己的需要去留
map  :s/$/\=   strftime(" %Y-%m-%d")
" 在项目级别查找单词所在的地方,并弹出窗口
map  :call Search_Word()
" 按<查看前一项内容
map < :cprevious
" 按>查看后一项内容
map > :cnext
" 只是查看函数被调用的地方,而不是字符串搜素
map  :call CS_Search_Word()
" 关闭弹出窗口
map  :cclose

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  :call CS_Search_calledfunc()
" 查看函数定义
map  :call CS_Search_whatfunc()
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

你可能感兴趣的:(源码阅读和管理,C程序设计)