2

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

4

3 回答 3

8

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

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

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

于 2013-03-06T16:18:04.583 回答
3

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

于 2013-09-13T22:41:58.217 回答
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'
    \ ]
\ } 

看最后两行。

就这样。

于 2013-11-20T12:29:18.987 回答