先将ctags更新到最新版本:
yum install ctags
现在我们到http://www.vim.org/scripts/script.php?script_id=273 下载最新版本的taglist plugin,目前版本是4.3。
在Fedora10和Ubuntu9.10里没找到这两个文件夹,而是在/usr/share/vim/vim72里:
plugin/taglist.vim – taglist插件 doc/taglist.txt - taglist帮助文件
- plugin/taglist.vim – taglist插件
- doc/taglist.txt - taglist帮助文件
注: windows用户需要把这个插件解压在你的$vim/vimfiles或$HOME/vimfiles目录。
使用下面的命令生成帮助标签(下面的操作在vim中进行):
:helptags ~/.vim/doc // 生成帮助标签后 :help taglist.txt // 查看taglist的帮助
Taglist提供了相当多的功能,可以在/etc/vimrc中这样配置:
"""""""""""""""""""""""""""""" " Tag list (ctags) """""""""""""""""""""""""""""" if MySys() == "windows" "设定windows系统中ctags程序的位置 let Tlist_Ctags_Cmd = 'ctags' elseif MySys() == "linux" "设定linux系统中ctags程序的位置 let Tlist_Ctags_Cmd = '/usr/bin/ctags' endif let Tlist_Show_One_File = 1 "不同时显示多个文件的tag,只显示当前文件的 let Tlist_Exit_OnlyWindow = 1 "如果taglist窗口是最后一个窗口,则退出vim let Tlist_Use_Right_Window = 1 "在右侧窗口中显示taglist窗口
这样配置后,当你输入”:Tlist “时,显示 如下窗口:
仔细阅读了cscope的手册后发现,原来cscope在产生索引文件时,只搜索类型为 C, lex和yacc的文件(后缀名为.c, .h, .l, .y),C++的文件根本没有生成索引。不过按照手册上的说明,cscope支持c++和Java语言的文件。
于是按照cscope手册 上提供的方法,先产生一个文件列表,然后让cscope为这个列表中的每个文件都生成索引。
为了方便使用,编写了下面的脚本来更新cscope和 ctags的索引文件:
#!/bin/sh find . -name "*.h" -o -name "*.c" -o -name "*.cc" > cscope.files cscope -bkq -i cscope.files ctags -R // 使taglist只显示当前文件tag,其它文件的tag都被折叠起来。
将这个脚本保存到/usr/local/bin /cscopes.sh,以后就可以直接是使用这个命令生成索引拉!
taglist 另外再装上 从cscope,就 可以连着 ctags+taglist+ Cscope也一起用.
ctags 常用快捷键 :
{ 转到上一个空行
} 转到下一个空行
gd 转到当前光标所指的局部变量的定义
* 转到当前光标所指的单词下一次出现的地方
# 转到当前光标所指的单词上一次出现的地方
ctrl+] 转到函数定义的地方
ctrl+t 回退到函数调用的地方
taglist常用快捷键:
<CR> 跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样 o 在一个新打开的窗口中显示光标下tag <Space> 显示光标下tag的原型定义 u 更新taglist窗口中的tag s 更改排序方式,在按名字排序和按出现顺序排序间切换 x taglist窗口放大和缩小,方便查看较长的tag + 打开一个折叠,同zoctags常用快捷键ctags常用快捷键 - 将tag折叠起来,同zc * 打开所有的折叠,同zR = 将所有tag折叠起来,同zM [[ 跳到前一个文件 ]] 跳到后一个文件 q 关闭taglist窗口
- <CR> 跳到光标下tag所定义的位置,用鼠标双击此tag功能也一样
- o 在一个新打开的窗口中显示光标下tag
- <Space> 显示光标下tag的原型定义
- u 更新taglist窗口中的tag
- s 更改排序方式,在按名字排序和按出现顺序排序间切换
- x taglist窗口放大和缩小,方便查看较长的tag
- + 打开一个折叠,同zoctags常用快捷键ctags常用快捷键
- - 将tag折叠起来,同zc
- * 打开所有的折叠,同zR
- = 将所有tag折叠起来,同zM
- [[ 跳到前一个文件
- ]] 跳到后一个文件
- q 关闭taglist窗口
cscope常用快捷键:
先按 ctrl+/ 然后 c: 查找该函数被调用的位置 d: 查找该函数调用了哪些函数 e: 查找指定的正规表达式 f: 查找指定的文件 g: 查找指定标识符的定义位置 i: 查找该文件在哪些地方被包含 s: 查找指定标识符的使用位置 t: 查找指定的文本字符串
- 先按 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窗口