更适合面向对象语言使用的显示函数列表插件-tagbar.vim
Published on 三月 26, 2011
之前在www.vim.org上逛,很惊讶于一个刚发布的插件居然就能获得100多的评分,很是吃惊,看了介绍才知道居然是一个类taglist的插件,并且弥补了一些taglist未曾解决的缺陷。
链接如下:
Tagbar
我们以C++的头文件和实现文件为例,用图片来直观的比较一下与taglist.vim的区别。
首先是头文件,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class CTestTagBar { public: CTestTagBar(); virtual ~CTestTagBar(); protected: int GetName(bool bOpen); private: int _init(int timeout); private: int m_ret; }; |
截图如下,其中左边的是taglist,右边的是tagbar。
然后是cpp文件,代码如下:
1 2 3 4 5 6 7 8 9 | #include "test_tagbar.h" CTestTagBar::CTestTagBar() {} CTestTagBar::~CTestTagBar() {} int CTestTagBar::GetName(bool bOpen) {} int CTestTagBar::_init(int timeout) {} |
截图如下,也是左边taglist,右边tagbar。
OK,相信大家一眼就能看出来tagbar与taglist关注点的区别。笔者通过自身的使用,简单的列了几点比taglist优化了的地方。
- 1.支持头文件的函数列表显示
- 2.对面向对象的支持更好
- 3.自动根据文件修改时间来重建
细心的读者可能会发现,tagbar对函数的可见级别也是做了区分的,分别用+ - # 并配合着色来做了区分
taglist虽然也会列出类列表,但是整体还是很不直观
taglist在这一点上体验就很不好,其实明明可以通过这种时间戳的方式来实现
既然tagbar有这么多好处,那我们就赶紧看看怎么用吧~
- 1.在官网上下载tagbar.vba文件,并执行:so %
- 2.在vimrc中加入如下配置
- 3.按下F4即可显示列表
1 2 3 | nmap <silent> <F4> :TagbarToggle<CR> let g:tagbar_ctags_bin = 'ctags' let g:tagbar_width = 30 |
OK,就这么简单!赶紧去试试吧!
好吧,说完了这么多优点,我还是不得不提几个缺点:
- 1.文件不支持中文路径
- 2.bug较多
这个其实taglist也有这个问题,笔者做了一个fix过之后的版本,放在这里,大家有兴趣可以自行下载。
可能由于刚刚发布不久,所以感觉bug还是有点多,希望能尽快fix掉。
希望插件的作者能够尽快fix掉这些问题,超过taglist,指日可待!
原创文章,版权所有。转载请注明:转载自Vimer的程序世界 [ http://www.vimer.cn ]
本文链接地址: http://www.vimer.cn/?p=2066


Rating 111/33,其实我一直看不懂这表示什么。说起来面向对象啊,vim的脚本的面向对象能力还是可以的,可以实现类,动态绑定,继承(子类貌似没办法用父类的方法,需要复制代码……),用来写脚本的时候还是挺好用的。
[回复]
Dante 回复:
三月 26th, 2011 at 9:57 上午
不好意思,是100多分,我写错了。。。
这个评分的意思就是33个人打分,总分是111,也就是说基本上每个人都打了4分的高分。
另外,vim脚本我没用到面向对象那么远,如果要涉及到大的插件的编写的话我都是直接用python了。。。
[回复]
子类貌似没办法用父类的方法,需要复制代码……,说明一下,这个的意思是子类方法要覆盖父类方法的时候,没办法在子类方法调用父类方法。
[回复]
我安装了tagbar,_vimrc设置好了,taglist可用,tagbar却不现实任何函数列表内容。
不知为何?
望能解答!
常来这里,学到不少东西,非常感谢!
[回复]
Dante 回复:
三月 26th, 2011 at 5:29 下午
呃,那就奇怪了。。配置都是对的吗?你是什么环境下?
[回复]
eric 回复:
三月 27th, 2011 at 6:35 下午
系统是win 7 64位的,ctags是5.8的,ctags的Path也设置了,_vimrc配置:
nmap :TagbarToggle
let g:tagbar_width = 30
同时也装有taglist插件,可用
[回复]
eric 回复:
五月 15th, 2011 at 5:12 下午
通过与Tagbar的作者Jan的交流,最新版的Tagbar已经解决了我的问题。感谢Jan的耐心帮助,Jan是一个相当热心的人!也感谢vimer博主的关注。
[回复]
tagbar却不显示任何函数列表内容?
[回复]
哈哈,这个我24小时前才装上,很不错~不过有个小问题:在 tag 上按回车跳转时,光标会转到最近访问过的窗口,而不是生成 tag 所用的那个窗口,但有时它们会是不同的窗口。
[回复]
Dante 回复:
三月 28th, 2011 at 9:42 上午
呃,我一般用taglist和tagbar的时候就只开一个源码窗口,就是怕乱跳。。。
[回复]
依云 回复:
三月 28th, 2011 at 1:32 下午
taglist 还好,从来都是跳到正确的文件,不过经常地是以为那个 tag 是当前文件里的,结果跳过去发现是另外的文件里的 -_-!
[回复]
tagbar如果能像taglist一样集成在winmanager里就好了
[回复]
Dante 回复:
三月 28th, 2011 at 9:40 上午
呃,其实我还是比较喜欢文件列表在左边,taglist在右边,如果想要集成的话,可以尝试自己写个插件管理一下buf~
[回复]
Vimer,你好,最近我想试试Voom这个插件,不过Python的设置一直弄不好。python我是从其他地方直接copy过来的,然后自己设置了环境变量。不过在gvim中每次执行:Voom这个命令的时候gvim(我在win7下运行的)就不正常退出了,很郁闷。我就自己编译了一个gvim,好不容易编译成功了。结果一样。我在gvim中执行:py print 2**0.5,也是不正常退出。不过:echo has (“python”)的值是1。最后我在控制台上按照教程写了一些python的小程序(我自己不会Python)也没有问题。Vimer知道是什么原因么?
[回复]
Dante 回复:
三月 29th, 2011 at 9:44 上午
呃,是linux下吗?
建议参考一下编译选项:
[回复]
天下懒鬼 回复:
三月 29th, 2011 at 6:26 下午
我在win7下面运行的,不是Linux。奇怪的是,无论是我自己编译的,还是直接下载安装的vim都是这样子。
[回复]
Dante 回复:
三月 29th, 2011 at 10:41 下午
用的是vim7.3吗,那要对应安装python2.7才行。
[回复]
依云 回复:
三月 29th, 2011 at 10:58 下午
如果是自己编译的那么 Python 版本无所谓了。看样子似乎是注册表和环境变量里都没有说 Python 的安装位置?试试像这样设置 PYTHONPATH:
set PYTHONPATH=%xxx%\Python27\Lib;%xxx%\Python27\DLLs
[回复]
天下懒鬼 回复:
四月 3rd, 2011 at 8:02 上午
折腾了几天,终于找到了,确实是Python的版本问题。我的win7上原来就装了一个python2.2,后来我从别的地方copy了一个python2.7,编译的时候指定的是python2.7的目录,结果运行时,我自己写的批处理是这样子的:
set path=%path%; ./python27/bin
运行时它找到的是python2.2的目录,估计就是这个问题了,谢谢大家的帮忙
[回复]
Dante 回复:
四月 4th, 2011 at 11:47 上午
哈哈,解决了就好~
[回复]
呵呵, 这个不错,不错,我以前就想taglist为什么不这么做! 谢谢了! 不知道还有没有能直观显示数据间结拓扑结构的插件! 呵呵
[回复]
看起来不错,多谢介绍
[回复]
Hi, 我按楼主说的装好了tagbar 以后,打开py文件,按F4是可以打开tagbar窗口,但是里面显示的function只有文件名,能不能把函数签名如 aaa function(param1,param2)等等也显示出来? 我是win7 + gvim + ipython
谢谢!
[回复]
Dante 回复:
十一月 8th, 2011 at 10:45 下午
呃,这里没有试过,可以看一下tagbar的文档
[回复]
Tivon 回复:
十一月 8th, 2011 at 11:00 下午
是不是这个功能依赖 python.dl?
我的机器是64位的,python 也只能装64的,vim是32位的。。。
所以vim里找不到python27.dll
[回复]
Dante 回复:
十一月 9th, 2011 at 10:17 上午
应该没关系。
[回复]
这次终于看清了,原来是tagbar,不是tabbar,还以为是切换buffer的那插件,唉
[回复]
HI,好,我下载并且安装tagbar以后,却无法执行script,提示说Not an editor command: TagbarToggle。在window环境下是好的,而现在我用的是Mac,MacVim,版本7.3.。。请问还有什么没设置或者可能是那方面错误么?taglist等都可以使用。
[回复]
sniperbat 回复:
一月 5th, 2012 at 2:28 下午
补充说明:
安装ConqueTerm也没有运行成功,情况一样。
貌似是和采用vmb安装有关系。
[回复]
Dante 回复:
一月 6th, 2012 at 11:23 上午
这个。。我没有试过macvim,这个问题可能没法帮你解答。。不好意思。。
[回复]
sniperbat 回复:
一月 6th, 2012 at 12:33 下午
换成不采用vmb安装,直接把2个plugin的vim相关文件拷贝到.vim目录相应目录里,删除.VimballRecord,就好了。。。。原因不明。
[回复]
[...] tagbar的介绍看这里:更适合面向对象语言使用的显示函数列表插件-tagbar.vim [...]