vim 的ctags,taglist和supertab详解

时间:2021-06-26 17:18:10
Taglist和Ctags介绍 
Taglist是Vim的源代码浏览插件,提供了在Vim中查看文件中包含的函数列表和类的方法类表的功能。Taglist功能的实现要依赖于Ctags。Ctags是一个用于产生代码索引文件的插件,其产生的索引文件用于帮助文本编辑器或其他工具快速,准确定位符号在代码文件中的位置。Ctags可以支持很多很多语言。。。


安装Ctags?
推荐使用Exuberant Ctags,其下载网址是 http://ctags.sourceforge.net/ . 
下载了源代码 ctags-**.tar.gz后解压缩,切换到其目录进行编译,安装
1../configure 
2.make 
3.suod make install
至此,Ctags安装完成。


有些系统自带有相关的软件包哦


安装Taglist

1.在 http://www.vim-taglist.sourceforge.net/screenshots.html 下载最新版的Taglist软件包。 
2.在个人用户目录下创建  .vim 目录,将taglist_**.zip中的内容解压到该目录。 
3.进入Vim,在命令模式下输入命令 "  helptags~/.vim/doc "即可完成Taglist的安装。 
4.输入命令“ Tlist ”检查是否安装成功。
把Ctags和Taglist联系起来
安装好Ctags和Taglist后,需要把它们联系起来。 
修改  ~/.vim/plugin/taglist.vim 文件,找到
if !exists(‘loaded_taglist’)
这一行,在其前面添加
let Tlist_Ctags_Cmd="/usr/bin/ctags"
OK,Vim+Taglist+Ctags安装完成!下面介绍如何使用使用 Vim+Taglist+Ctags 阅读代码!
使用Ctags和Taglist

1.  生成tags文件 
在目录树的根目录里,使用命令:ctags -R 或 ctags –recurse 
如: ctags -R src/* ,则会在当前目录下生成 tags 文件
要生成 cppcomplete 需要的 tags 文件的话,需要运行下面的命令: 
ctags -n -f cppcomplete.tags –fields=+ai –C++-types=+p * -L cscope.files
注意,参数"-L cscope.files" 仅仅是借用了cscope生成的文件索引来帮助ctags去查询相关工程文件生成tags。


2.  编辑 vim 配置文件 .vimrc 
在 .vimrc 文件中添加:
set tags=tags; 
set autochdir
注: 第一个命令里的分号是必不可少的。这个命令让vim首先在当前目录里寻找tags文件,如果没有找到tags文件,或者没有找到对应的目标,就到父目录 中查找,一直向上递归。因为tags文件中记录的路径总是相对于tags文件所在的路径,所以要使用第二个设置项来改变vim的当前目录。

当然你如果想直接使用绝对路径,这样也是可以的:
set tags=/home/xxx/myproject/tags
另外,在 Vim 配置文件 ~/.vimrc 中添加:

filetype plugin on 
"let Tlist_Ctags_Cmd = ‘/usr/bin/ctags’ “设置ctags命令目录
let Tlist_Show_One_File = 1 "不同时显示多个文件的tag,只显示当前文件的
let Tlist_Exit_OnlyWindow = 1 "如果taglist窗口是最后一个窗口,则退出vim
"let Tlist_Use_Right_Window = 1 “让taglist窗口在右侧显示



3. 打开 Vim 前使用命令 ctags -R 产生tags文件, Vim 在启动时会自动查找并加载tags文件。


打开 Vim 之后, 使用命令 :Tlist 激活 Taglist; 按两次  Ctrl + W 在两个窗口来回跳转;Ctrl + ] 或 回车键 查看函数定义(前者在 Taglist 窗口显示, 后者在源文件窗口显示), Ctrl + O 返回源文件。其他的相关快捷键(taglist)如下:
Taglist 快捷键 
回车键 跳到光标所在的标记的定义处(如将光标移到main函数,按回车键)
o 新建一个窗口,跳到标记定义处
p 预览标记定义(仍然在taglist窗口)
空格 在窗口的最下面显示标记的原型(如函数原型)
u 更新标记列表(比如源文件新增了一个函数,并在保存后,可在taglist窗口按u)
s 更改排序方式,在按名字排序和按出现顺序排序间切
d 删除光标所在的taglist文件(如用vi打开了两个文件f1.c,f2.c可以删除f1.c的标记)
x 放大/缩小taglist窗口
+ 展开(指标记)
- 折叠
* 全部展开
= 全部折叠
[[ 将光标移到前一个文件的起点
]] 将光标移到后一个文件的起点
q 退出taglist窗口

可以用”:TlistOpen“打开taglist窗口,用”:TlistClose“关闭taglist窗口。或者使用”:TlistToggle“在打开和关闭间切换。在我的vimrc中定义了下面的映射,使用<F9>键就可以打开/关闭taglist窗口:map <silent> <F9> :TlistToggle<cr> 

最方便的方法是把光标移到变量名或函数名上,然后按下 Ctrl-] , 用 Ctrl-O 退回原来的地方。


SuperTab插件 : 简化补全代码的快捷键, 按 Tab 键即可(以前需要按 Ctrl + X, Ctrl + O )。


1.点此下载 SuperTab 插件( http://www.vim.org/scripts/script.php?script_id=1643), 放入插件文件夹内; 
2.用 Vim 打开 supertab.vba, 并输入  :so% ; 
3.敲回车后完成安装。 
配置 SuperTab :

vimrc中添加:

let g:SuperTabRetainCompletionType=2
" 0 – 不记录上次的补全方式
" 1 – 记住上次的补全方式,直到用其他的补全命令改变它
" 2 – 记住上次的补全方式,直到按ESC退出插入模式为止
let g:SuperTabDefaultCompletionType="<C-X><C-O>"
" 设置按下<Tab>后默认的补全方式, 默认是<C-P>,
" 现在改为<C-X><C-O>. 关于<C-P>的补全方式,
" 还有其他的补全方式, 你可以看看下面的一些帮助:
" :help ins-completion
" :help compl-omni

之后就可以用 Tab 代替 Ctrl + X, Ctrl + O 了。

SuperTab使用很简单,只要在输入变量名或路径名等符号中途按Tab键,就能得到以前输入过的符号列表,并通过Tab键循环选择。