我可以使用 exctags ( Exuberant Ctags )成功地tags
为 vim 创建一个文件。
但是,创建允许跳转到函数原型的标记不起作用,因为系统标头使用了形式的语法修改宏
#define _EXFUN(name, proto) name proto
并且在,例如string.h
使用
char *_EXFUN(strchr,(const char *, int));
_EXFUN
它为而不是创建一个标签strchr
:
_EXFUN /somedir/include/string.h /^char *_EXFUN(strchr,(const char *, int));$/;" p
我用这个命令创建标签:
exctags -f tags.p --language-force=c --c-kinds=p file1 file2 ...
我已经上下阅读了 exctags 手册页,尝试了各种-I
影响宏扩展的选项,但无济于事。有没有人解决这个问题?
在预处理的文件上运行
ectags
,并要求它查看预处理器的注释(--line-directives=yes
)并将行号写入tags
文件(-n
或--excmd=numbers
)。示例 C 文件:
结果
tags
文件:如您所见, 的原型
strchr
被列为出现在第 3 行的prog.c
.这样做的缺点是您不会获得任何用于预处理宏的标记条目。
ectags
您可以通过在预处理文件和原始文件上运行来解决这个问题:产生
要处理该特定宏,您可以使用以下
--regex-<LANG>
选项:这会生成一个
tags
文件: