http://easwy.com/blog/ 很敬佩这位大牛!!
下载插件的官网是:搜一下想找的插件立马就会出来,官网很强大。
vim 默认安装在/usr/share/vim 里面vim73 和 vimfiles 两个文件夹,vim73中有一些.vim文件
vim配置文件为 /etc下的vimrc文件
Vim 中使用Cscope+taglist
1,Cscope 以及Ctag索引文件的建立:
为了方便使用,编写了下面的脚本来更新cscope和ctags的索引文件:
#!/bin/sh
find . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files
cscope -bkq -i cscope.files
ctags -R
这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。其中cscope.out是基本的符号索引,后两个文件是使用"-q"选项生成的,可以加快cscope的索引速度。
这个脚本,首先使用find命令,查找当前目录及子目录中所有后缀名为".h", ".c"和".c"的文件,并把查找结果重定向到文件cscope.files中。 然后cscope根据cscope.files中的所有文件,生成符号索引文件。最后一条命令使用ctags命令,生成一个tags文件,在vim中执行":help tags"命令查询它的用法。它可以和cscope一起使用。上面所用到的命令参数,含义如下:
-R: 在生成索引文件时,搜索子目录树中的代码
-b: 只生成索引文件,不进入cscope的界面
-q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度
-k: 在生成索引文件时,不搜索/usr/include目录
-i: 如果保存文件列表的文件名不是cscope.files时,需要加此选项告诉cscope到哪儿去找源文件列表。可以使用“-”,表示由标准输入获得文件列表。
-I dir: 在-I选项指出的目录中查找头文件
-u: 扫描所有文件,重新生成交叉索引文件
-C: 在搜索时忽略大小写
-P path: 在以相对路径表示的文件前加上的path,这样,你不用切换到你数据库文件所在的目录也可以使用它了。
2,在VIM加载cscope.out文件
在VIM中使用cscope非常简单,首先调用“cscope add”命令添加一个cscope数据库,然后就可以调用“cscope find”命令进行查找了。VIM支持8种cscope的查询功能,如下:例如,我们想在代码中查找调用work()函数的函数,我们可以输入:“:cs find c work”.在源代码目录下打开vim。要使用cscope查找就必须加载cscope.out文件.
s: 查找C语言符号,即查找函数名、宏、枚举值等出现的地方
g: 查找函数、宏、枚举等定义的位置,类似ctags所提供的功能d: 查找本函数调用的函数
c: 查找调用本函数的函数
t: 查找指定的字符串
e: 查找egrep模式,相当于egrep功能,但查找速度快多了
f: 查找并打开文件,类似vim的find功能
i: 查找包含本文件的文
在安装了cscope和ctags的情况下,以下命令特别好使,他们现在cscope.out 数据库中查找,若没有则在ctags中查找
ctrl+]:在函数调用的地方跳转到函数定义的地方
ctrl+t:返回上一个查找的地方
其它命令介绍:ctrl+]:在函数调用的地方跳转到函数定义的地方
ctrl+t:返回上一个查找的地方
特别注意:所生成的cscope.out和tags文件要在打开VIM所在的文件夹,否则VIM无法找到相关符号信息。
3,Cscope快捷键的使用
nmap <C-@><C-@>s :vert scs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-@><C-@>g :vert scs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-@><C-@>c :vert scs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-@><C-@>t :vert scs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-@><C-@>e :vert scs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-@><C-@>f :vert scs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-@><C-@>i :vert scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-@><C-@>d :vert scs find d <C-R>=expand("<cword>")<CR><CR>
如果使用快捷键的话,需要自己建立以个文件,将上面的几行复制到文件中 /root/.vim/plugin/cscope_maps.vim
4,taglist的安装和使用
能够列出源文件中的tag(function, class, variable, etc)并跳转.
注意:taglist依赖于ctags,所以要先装ctags,否则taglist装了也没法用!
(1)到http://vim.sourceforge.net/scripts/script.php?script_id=273
下载最新的taglist,我的版本是taglist_45.zip,解压你会发现俩个文件夹:doc和plugin.(2) 把上面两个文件夹放到$HOME/.vim目录下,或者$HOME/vimfiles或$VIM/vimfiles目录下。
(3)使用
在vim中用":TlistToggle"打开左边的tag窗口,再输一次自动关闭,按ctrl+w可以在窗口之间进行切换,也可以按照如下方法定义一个快捷键
nnoremap :TlistToggle
":TlistOpen":Open and jump to the taglist window.
":TlistClose":Close the taglist window.
":TlistToggle":Open or close (toggle) the taglist window.
在taglist中的一些操作:
: 跳转到光标处tag的源文件(就是回车键)
o : 打开新窗口,并跳转到光标处tag的源文件。
p : 与
t : 打开新tab并跳转到光标处tag的源文件。
: 显示光标处tag的函数原型
+ : 打开tag组
- : 收拢tag组
x : 最大化/还原
二 . 配置~/.vimrc
下面讲一下~/.vimrc配置文件的设置,下面是我自己的文件的设置
" 开启语法高亮
syntax on
" 设置文字编码自动识别
set fencs=utf-8,cp936
" 使用鼠标
set mouse=a
" 设置高亮搜索
set hlsearch
" 输入字符串就显示匹配点
set incsearch
" 输入的命令显示出来,看的清楚些。
set showcmd
" Tlist的内部变量。函数列表。
let Tlist_Use_Right_Window=1
let Tlist_File_Fold_Auto_Close=1
"函数和变量列表
map :TlistToggle
"全能补全
inoremap
" 没事,鼠标画线玩的。
" noremap :call ToggleSketch()
set wildmenu
" 启动函数变量快速浏览的时间设置
set updatetime=100
然后你就可以在你vim中使用taglist,此时只需要点击F4来打开或者关闭!
经过充实我的~/.vimrc内容如下:
set hlsearch
set ai
syntax on
set number
set nocompatible
set columns=80
filetype on
set history=1000
set autoindent
set smartindent
set tabstop=4
set shiftwidth=4
set showmatch
set guioptions-=T
set vb t_vb=
set ruler
set nohls
set noexpandtab
set ignorecase
set mouse=a
set cindent
set incsearch
set fencs=utf-8,cp936
set showcmd
"Tlist的内部变量。函数列表。
let Tlist_Use_Right_Window=1
let Tlist_File_Fold_Auto_Close=1
" "函数和变量列表
map :TlistToggle
" "全能补全
inoremap
" " 没事,鼠标画线玩的。
noremap :call ToggleSketch()
set wildmenu
" " 启动函数变量快速浏览的时间设置
set updatetime=100
map :split
map :vsplit
map :q!
map :w!
map :wq!
autocmd FileType python set omnifunc=pythoncomplete#Complete
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 != ""
cs add $CSCOPE_DB
endif
set csverb
set cscopetag
"set cscopequickfix=s-,g-,d-,t-,e-,f-,i-
endif
附上.vim以及.vimrc
http://tg1a198.mail.163.com/app/wp/doGetFile.jsp?sid=vEQDTWagKqfZdcHkAaggnuFESsZCbTAZ&mode=download&mid=154:1tbimh4gH0R3OUgvAwABsU
http://tg1a198.mail.163.com/app/wp/doGetFile.jsp?sid=vEQDTWagKqfZdcHkAaggnuFESsZCbTAZ&mode=download&mid=154:1tbimh4gH0R3OUgvAwAAsV
参考文章:http://blogold.chinaunix.net/u1/59481/showart_1861521.html
cscope的主页在: http://cscope.sourceforge.net/
在vim的网站上,有很多和cscope相关的插件,可以去找一下你有没有所感兴趣的。搜索结果在这里:
点这里