【发布时间】:2013-11-20 20:54:17
【问题描述】:
图片显示全局变量Class A,但局部变量不能在标签栏中显示,为什么?我要 tagbar 显示局部变量 str,m,n 以及如何设置??
【问题讨论】:
图片显示全局变量Class A,但局部变量不能在标签栏中显示,为什么?我要 tagbar 显示局部变量 str,m,n 以及如何设置??
【问题讨论】:
ctags 解析的内容取决于语言;根据屏幕截图,您对 C/C++ 感兴趣,但它不这样做。我不知道最初的原因,但我猜:
Exuberant Ctags 解析器可以使用基于正则表达式的自定义语言定义进行扩展(参见--langdef=<language> 和--regex-<language> 参数)。如果你能为局部变量想出一个好的模式,你就可以解析它们。
【讨论】:
Exuberant Ctags 支持将局部变量作为标签,它们只是默认关闭。我想他们会让你的标签文件对于任何规模的项目都很大,而且我从来没有因为这个原因打开它们(我的标签文件已经有很多兆字节了)。但是,如果您想尝试一下,只需在生成标记文件时将 --c++-kinds=+l(假设为 c++)添加到您的 ctags 命令中,这应该可以工作。
【讨论】:
首先,标签栏显示来自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'
\ ]
\ }
看看最后两行。
就是这样。
【讨论】: