最后更新于 .

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

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

首先是头文件,代码如下:

class CTestTagBar
{
public:
    CTestTagBar();
    virtual ~CTestTagBar();

protected:
    int GetName(bool bOpen);

private:
    int _init(int timeout);

private:
    int m_ret;
};

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

1

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

#include "test_tagbar.h"
CTestTagBar::CTestTagBar()
{}
CTestTagBar::~CTestTagBar()
{}
int CTestTagBar::GetName(bool bOpen)
{}
int CTestTagBar::_init(int timeout)
{}

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

1

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

  1. 支持头文件的函数列表显示
    细心的读者可能会发现,tagbar对函数的可见级别也是做了区分的,分别用+ - # 并配合着色来做了区分
  2. 对面向对象的支持更好
    taglist虽然也会列出类列表,但是整体还是很不直观
  3. 自动根据文件修改时间来重建
    taglist在这一点上体验就很不好,其实明明可以通过这种时间戳的方式来实现

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

nmap <silent> <F4> :TagbarToggle<CR>
let g:tagbar_ctags_bin = 'ctags'
let g:tagbar_width = 30
  1. 在官网上下载tagbar.vba文件,并执行:so %
  2. 在vimrc中加入如下配置
  3. 按下F4即可显示列表

OK,就这么简单!赶紧去试试吧! 好吧,说完了这么多优点,我还是不得不提几个缺点:

  1. 文件不支持中文路径
    这个其实taglist也有这个问题,笔者做了一个fix过之后的版本,放在这里,大家有兴趣可以自行下载。
  2. bug较多
    可能由于刚刚发布不久,所以感觉bug还是有点多,希望能尽快fix掉。

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

Pingbacks

  1. VIM推荐插件介绍 - FxCk IT on #

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

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. fanhe

    fanhe on #

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

    Reply

    1. Dante

      Dante on #

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

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

      Reply

  2. fanhe

    fanhe on #

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

    Reply

  3. eric

    eric on #

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

    Reply

    1. Dante

      Dante on #

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

      Reply

      1. eric

        eric on #

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

        同时也装有taglist插件,可用

        Reply

      2. eric

        eric on #

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

        Reply

  4. eric

    eric on #

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

    Reply

  5. 依云

    依云 on #

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

    Reply

    1. Dante

      Dante on #

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

      Reply

      1. 依云

        依云 on #

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

        Reply

  6. gadmyth

    gadmyth on #

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

    Reply

    1. Dante

      Dante on #

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

      Reply

  7. 天下懒鬼

    天下懒鬼 on #

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

    Reply

    1. Dante

      Dante on #

      呃,是linux下吗?
      建议参考一下编译选项:
      <pre lang="bash" line="1">
      ./configure --prefix=/usr/vim --enable-multibyte --enable-pythoninterp --with-features=huge
      </pre>

      Reply

      1. 天下懒鬼

        天下懒鬼 on #

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

        Reply

        1. Dante

          Dante on #

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

          Reply

          1. 依云

            依云 on #

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

            Reply

            1. 天下懒鬼

              天下懒鬼 on #

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

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

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

              Reply

              1. Dante

                Dante on #

                哈哈,解决了就好~

                Reply

  8. liu1061

    liu1061 on #

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

    Reply

  9. georgexsh

    georgexsh on #

    看起来不错,多谢介绍

    Reply

  10. Tivon

    Tivon on #

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

    Reply

    1. Dante

      Dante on #

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

      Reply

      1. Tivon

        Tivon on #

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

        所以vim里找不到python27.dll

        Reply

        1. Dante

          Dante on #

          应该没关系。

          Reply

  11. vimest

    vimest on #

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

    Reply

  12. sniperbat

    sniperbat on #

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

    Reply

    1. sniperbat

      sniperbat on #

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

      Reply

      1. Dante

        Dante on #

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

        Reply

        1. sniperbat

          sniperbat on #

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

          Reply

发表评论