之前在www.vim.org上逛,很惊讶于一个刚发布的插件居然就能获得100多的评分,很是吃惊,看了介绍才知道居然是一个类taglist的插件,并且弥补了一些taglist未曾解决的缺陷。
链接如下:
Tagbar

我们以C++的头文件和实现文件为例,用图片来直观的比较一下与taglist.vim的区别。
首先是头文件,代码如下:

截图如下,其中左边的是taglist,右边的是tagbar。

1

然后是cpp文件,代码如下:

截图如下,也是左边taglist,右边tagbar。

1

OK,相信大家一眼就能看出来tagbar与taglist关注点的区别。笔者通过自身的使用,简单的列了几点比taglist优化了的地方。

  • 1.支持头文件的函数列表显示
  • 细心的读者可能会发现,tagbar对函数的可见级别也是做了区分的,分别用+ – # 并配合着色来做了区分

  • 2.对面向对象的支持更好
  • taglist虽然也会列出类列表,但是整体还是很不直观

  • 3.自动根据文件修改时间来重建
  • taglist在这一点上体验就很不好,其实明明可以通过这种时间戳的方式来实现

既然tagbar有这么多好处,那我们就赶紧看看怎么用吧~

  • 1.在官网上下载tagbar.vba文件,并执行:so %
  • 2.在vimrc中加入如下配置
  • 3.按下F4即可显示列表

OK,就这么简单!赶紧去试试吧!

好吧,说完了这么多优点,我还是不得不提几个缺点:

  • 1.文件不支持中文路径
  • 这个其实taglist也有这个问题,笔者做了一个fix过之后的版本,放在这里,大家有兴趣可以自行下载。

  • 2.bug较多
  • 可能由于刚刚发布不久,所以感觉bug还是有点多,希望能尽快fix掉。

希望插件的作者能够尽快fix掉这些问题,超过taglist,指日可待!

把VIM打造成一个真正的IDE(2)

OK,上一篇文章,我们已经配置好了一个可以正常使用的VIM,那么在我们真正来到程序员的VIM世界之前,希望你能在VIM里面再多加下面几个配置。 set go= “...

阅读全文

32则回应给“更适合面向对象语言使用的显示函数列表插件-tagbar.vim”

  1. fanhe说道:

    Rating 111/33,其实我一直看不懂这表示什么。说起来面向对象啊,vim的脚本的面向对象能力还是可以的,可以实现类,动态绑定,继承(子类貌似没办法用父类的方法,需要复制代码……),用来写脚本的时候还是挺好用的。

    [回复]

    Dante 回复:

    不好意思,是100多分,我写错了。。。
    这个评分的意思就是33个人打分,总分是111,也就是说基本上每个人都打了4分的高分。

    另外,vim脚本我没用到面向对象那么远,如果要涉及到大的插件的编写的话我都是直接用python了。。。

    [回复]

  2. fanhe说道:

    子类貌似没办法用父类的方法,需要复制代码……,说明一下,这个的意思是子类方法要覆盖父类方法的时候,没办法在子类方法调用父类方法。

    [回复]

  3. eric说道:

    我安装了tagbar,_vimrc设置好了,taglist可用,tagbar却不现实任何函数列表内容。
    不知为何?
    望能解答!
    常来这里,学到不少东西,非常感谢!

    [回复]

    Dante 回复:

    呃,那就奇怪了。。配置都是对的吗?你是什么环境下?

    [回复]

    eric 回复:

    系统是win 7 64位的,ctags是5.8的,ctags的Path也设置了,_vimrc配置:
    nmap :TagbarToggle
    let g:tagbar_width = 30

    同时也装有taglist插件,可用

    [回复]

    eric 回复:

    通过与Tagbar的作者Jan的交流,最新版的Tagbar已经解决了我的问题。感谢Jan的耐心帮助,Jan是一个相当热心的人!也感谢vimer博主的关注。

    [回复]

  4. eric说道:

    tagbar却不显示任何函数列表内容?

    [回复]

  5. 依云说道:

    哈哈,这个我24小时前才装上,很不错~不过有个小问题:在 tag 上按回车跳转时,光标会转到最近访问过的窗口,而不是生成 tag 所用的那个窗口,但有时它们会是不同的窗口。

    [回复]

    Dante 回复:

    呃,我一般用taglist和tagbar的时候就只开一个源码窗口,就是怕乱跳。。。

    [回复]

    依云 回复:

    taglist 还好,从来都是跳到正确的文件,不过经常地是以为那个 tag 是当前文件里的,结果跳过去发现是另外的文件里的 -_-!

    [回复]

  6. gadmyth说道:

    tagbar如果能像taglist一样集成在winmanager里就好了

    [回复]

    Dante 回复:

    呃,其实我还是比较喜欢文件列表在左边,taglist在右边,如果想要集成的话,可以尝试自己写个插件管理一下buf~

    [回复]

  7. 天下懒鬼说道:

    Vimer,你好,最近我想试试Voom这个插件,不过Python的设置一直弄不好。python我是从其他地方直接copy过来的,然后自己设置了环境变量。不过在gvim中每次执行:Voom这个命令的时候gvim(我在win7下运行的)就不正常退出了,很郁闷。我就自己编译了一个gvim,好不容易编译成功了。结果一样。我在gvim中执行:py print 2**0.5,也是不正常退出。不过:echo has (“python”)的值是1。最后我在控制台上按照教程写了一些python的小程序(我自己不会Python)也没有问题。Vimer知道是什么原因么?

    [回复]

    Dante 回复:

    呃,是linux下吗?
    建议参考一下编译选项:

    [回复]

    天下懒鬼 回复:

    我在win7下面运行的,不是Linux。奇怪的是,无论是我自己编译的,还是直接下载安装的vim都是这样子。

    [回复]

    Dante 回复:

    用的是vim7.3吗,那要对应安装python2.7才行。

    [回复]

    依云 回复:

    如果是自己编译的那么 Python 版本无所谓了。看样子似乎是注册表和环境变量里都没有说 Python 的安装位置?试试像这样设置 PYTHONPATH:
    set PYTHONPATH=%xxx%\Python27\Lib;%xxx%\Python27\DLLs

    [回复]

    天下懒鬼 回复:

    折腾了几天,终于找到了,确实是Python的版本问题。我的win7上原来就装了一个python2.2,后来我从别的地方copy了一个python2.7,编译的时候指定的是python2.7的目录,结果运行时,我自己写的批处理是这样子的:

    set path=%path%; ./python27/bin

    运行时它找到的是python2.2的目录,估计就是这个问题了,谢谢大家的帮忙

    [回复]

    Dante 回复:

    哈哈,解决了就好~

    [回复]

  8. liu1061说道:

    呵呵, 这个不错,不错,我以前就想taglist为什么不这么做! 谢谢了! 不知道还有没有能直观显示数据间结拓扑结构的插件! 呵呵

    [回复]

  9. georgexsh说道:

    看起来不错,多谢介绍

    [回复]

  10. Tivon说道:

    Hi, 我按楼主说的装好了tagbar 以后,打开py文件,按F4是可以打开tagbar窗口,但是里面显示的function只有文件名,能不能把函数签名如 aaa function(param1,param2)等等也显示出来? 我是win7 + gvim + ipython
    谢谢!

    [回复]

    Dante 回复:

    呃,这里没有试过,可以看一下tagbar的文档

    [回复]

    Tivon 回复:

    是不是这个功能依赖 python.dl?
    我的机器是64位的,python 也只能装64的,vim是32位的。。。

    所以vim里找不到python27.dll

    [回复]

    Dante 回复:

    应该没关系。

    [回复]

  11. vimest说道:

    这次终于看清了,原来是tagbar,不是tabbar,还以为是切换buffer的那插件,唉

    [回复]

  12. sniperbat说道:

    HI,好,我下载并且安装tagbar以后,却无法执行script,提示说Not an editor command: TagbarToggle。在window环境下是好的,而现在我用的是Mac,MacVim,版本7.3.。。请问还有什么没设置或者可能是那方面错误么?taglist等都可以使用。

    [回复]

    sniperbat 回复:

    补充说明:
    安装ConqueTerm也没有运行成功,情况一样。
    貌似是和采用vmb安装有关系。

    [回复]

    Dante 回复:

    这个。。我没有试过macvim,这个问题可能没法帮你解答。。不好意思。。

    [回复]

    sniperbat 回复:

    换成不采用vmb安装,直接把2个plugin的vim相关文件拷贝到.vim目录相应目录里,删除.VimballRecord,就好了。。。。原因不明。

    [回复]

  13. [...] tagbar的介绍看这里:更适合面向对象语言使用的显示函数列表插件-tagbar.vim [...]

发表评论