ctags+taglist+cscope的安装以及常用快捷键
1、cscope
1) 安装
可以在http://cscope.sourceforge.net/下载源码包,然后解压,编译安装。
./configure
make
make install
2)帮助
- vim Help文件(中文): http://vimcdoc.sourceforge.net/vim_user_manual_603.0.pdf 强烈建议VIM的初学者,主要是害怕读英文Help文件的朋友阅读!翻译的非常好,在此感谢译者ZhaoRuFei。
- vimdoc项目的主页在:http://vimcdoc.sourceforge.net/ ,有时间可以去看看
- vim主页:http://www.vim.org/, 这个网站不用介绍了吧。
- vim资源收集:(点击此处http://www3.linuxforum.net/), linux forum上的一个网友收集的vim资源,相当不错。
- cscope主页:http://cscope.sourceforge.net, cscope的主页,程序员的利器。
- cscope与vim入门:The Vim/Cscope tutorial
- 使用cscope管理大软件项目:Using Cscope on large projects (example: the Linux kernel)
- vim实用技术:一、二、三, IBM developerWork上的文章,初学者可以一看。
- vim group:http://groups.google.com/group/Vim-cn/ , google上的vim group,不过人气还不是很旺。
3)脚本
#!/bin/sh
find . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files
cscope -bkq -i cscope.files
ctags -R // 使taglist只显示当前文件tag,其它文件的tag都被折叠起来。
-R : 在生成索引文件时,搜索子目录树中的代码
-b : 只生成索引文件,不进入cscope的界面
-k : 在生成索引文件时,不搜索 / usr / include目录
-q : 生成cscope . in . out和cscope . po . out文件,加快cscope的索引速度
将这个脚本保存到/usr/local/bin/cscopes.sh,以后就可以直接是使用这个命令生成索引拉!
taglist 另外再装上 从cscope,就 可以连着 ctags+taglist+ Cscope也一起用.
2、ctags 常用快捷键
{ 转到上一个空行
} 转到下一个空行
gd 转到当前光标所指的局部变量的定义
* 转到当前光标所指的单词下一次出现的地方
# 转到当前光标所指的单词上一次出现的地方
ctrl+] 转到函数定义的地方
ctrl+t 回退到函数调用的地方
3、taglist常用快捷键
<CR> 跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样
o 在一个新打开的窗口中显示光标下tag
<Space> 显示光标下tag的原型定义
u 更新taglist窗口中的tag
s 更改排序方式,在按名字排序和按出现顺序排序间切换
x taglist窗口放大和缩小,方便查看较长的tag
+ 打开一个折叠,同zoctags常用快捷键ctags常用快捷键
- 将tag折叠起来,同zc
* 打开所有的折叠,同zR
= 将所有tag折叠起来,同zM
[[ 跳到前一个文件
]] 跳到后一个文件
q 关闭taglist窗口
4、cscope常用快捷键
先按 ctrl+/ 然后
c: 查找该函数被调用的位置
d: 查找该函数调用了哪些函数
e: 查找指定的正规表达式 f: 查找指定的文件
g: 查找指定标识符的定义位置
i: 查找该文件在哪些地方被包含
s: 查找指定标识符的使用位置
t: 查找指定的文本字符串
需要上面的快捷键的话,还需要修改/etc/vimrc
"if has("cscope") && filereadable("/usr/bin/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
"endif
nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>
let Tlist_Show_One_File = 1 "不同时显示多个文件的tag,只显示当前文件的
let Tlist_Exit_OnlyWindow = 1 "如果taglist窗口是最后一个窗口,则退出vim
let Tlist_Use_Right_Window = 1 "在右侧窗口中显示taglist窗口