vim标签栏可以显示局部变量吗?

时间:2013-03-06 15:55:27

标签: vim ctags tagbar

The image shows that global variable Class A, but the local variable can't be show in tagbar,why? I want tagbar show local variable str,m,n and how to set?? 图像显示全局变量A类,但局部变量不能在tagbar中显示,为什么?我想要标签栏显示局部变量str,m,n以及如何设置??

3 个答案:

答案 0 :(得分:8)

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

  • 有了庞大的代码库(谁没有?),你(也许还有编辑器)会被标签的数量所淹没。请记住,标签栏有一点特别之处在于它只显示当前文件的标签;通常标签数据库用于整个项目。
  • 保持个人职能的短小是一个好习惯;谁需要标签查找,理想情况下每个功能完全适合屏幕?!

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

首先,tagbar显示来自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'
    \ ]
\ } 

看看最后两行。

就是这样。