【问题标题】:Can the vim tagbar display a local variable?vim标签栏可以显示局部变量吗?
【发布时间】:2013-11-20 20:54:17
【问题描述】:

图片显示全局变量Class A,但局部变量不能在标签栏中显示,为什么?我要 tagbar 显示局部变量 str,m,n 以及如何设置??

【问题讨论】:

    标签: vim ctags tagbar


    【解决方案1】:

    ctags 解析的内容取决于语言;根据屏幕截图,您对 C/C++ 感兴趣,但它不这样做。我不知道最初的原因,但我猜:

    • 拥有庞大的代码库(谁没有?),您(也许还有编辑器)会被标签的数量所淹没。请记住,tagbar 有点特殊,它只显示当前文件的标签;通常标签数据库是针对整个项目的。
    • 将单个函数保持简短和小型是一种很好的做法;当理想情况下每个功能都适合整个屏幕时,谁需要标签查找?!

    Exuberant Ctags 解析器可以使用基于正则表达式的自定义语言定义进行扩展(参见--langdef=<language>--regex-<language> 参数)。如果你能为局部变量想出一个好的模式,你就可以解析它们。

    【讨论】:

      【解决方案2】:

      Exuberant Ctags 支持将局部变量作为标签,它们只是默认关闭。我想他们会让你的标签文件对于任何规模的项目都很大,而且我从来没有因为这个原因打开它们(我的标签文件已经有很多兆字节了)。但是,如果您想尝试一下,只需在生成标记文件时将 --c++-kinds=+l(假设为 c++)添加到您的 ctags 命令中,这应该可以工作。

      【讨论】:

        【解决方案3】:

        首先,标签栏显示来自ctags的所有标签,ctags默认不处理函数原型、外部变量和局部变量(在shell中试试这个:ctags --list-kinds=c++);
        其次,tagbar 的 tagbar_type_cpp 变量用于此:

        let g:tagbar_type_cpp = {
            \ 'kinds' : [
                \ 'd:macros:1',
                \ 'g:enums',
                \ 't:typedefs:0:0',
                \ 'e:enumerators:0:0',
                \ 'n:namespaces',
                \ 'c:classes',
                \ 's:structs',
                \ 'u:unions',
                \ 'f:functions',
                \ 'm:members:0:0',
                \ 'v:global:0:0',
                \ 'x:external:0:0',
                \ 'l:local:0:0'
            \ ]
        \ } 
        

        看看最后两行。

        就是这样。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-31
          • 2016-01-21
          • 1970-01-01
          • 2017-09-19
          • 2017-08-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多