使用cscope发现了一个重大的缺点,就是它包含了太多的输出,比如你要查找platform_driver结构体的定义,它会输出platform_driver的声明,很多变量等。真正的定义被淹没在输出中。因此又回过头来学习ctags。
ctags只能生成数据库,本身不能查询。
支持的语言,可以使用--list-languages列出来。根据文件自动映射到语言,可以使用--list-maps查看这个映射关系,如下是部分输出:
1 2 3 4 5 6 7 8  | $ ctags --list-mapsAnt      *.build.xmlAsm      *.asm *.ASM *.s *.S *.A51 *.29[kK] *.[68][68][kKsSxX] *.[xX][68][68]Asp      *.asp *.asaAwk      *.awk *.gawk *.mawkBasic    *.bas *.bi *.bb *.pbBETA     *.betC        *.c | 
使用--language-force强制使用某种语言。
-f file,指定数据库文件的文件名,如果没有这个选项,默认是tags。如果file为-,则输出到标准输出。
-L file,指定一个源文件列表。
-R,如果不是通过-L选项指定源文件列表,而是通过命令行参数指定一个目录,这个选项会搜索目录下所有的源文件。
--list-kinds显示,每种语言支持的符号类型,以及默认是否包含该类型:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18  | $ ctags --list-kinds。。。C                                                                                                                                                                                                                       c  classes                                                                                                                                                                                                          d  macro definitions                                                                                                                                                                                                e  enumerators (values inside an enumeration)                                                                                                                                                                       f  function definitions                                                                                                                                                                                             g  enumeration names                                                                                                                                                                                                l  local variables [off]                                                                                                                                                                                            m  class, struct, and union members                                                                                                                                                                                 n  namespaces                                                                                                                                                                                                       p  function prototypes [off]                                                                                                                                                                                        s  structure names                                                                                                                                                                                                  t  typedefs                                                                                                                                                                                                         u  union names                                                                                                                                                                                                      v  variable definitions                                                                                                                                                                                             x  external and forward variable declarations [off] 。。。 | 
建立数据库时,可以指定想要的类型:
--c-kinds=+p-m
表示c语言,支持p类型,去掉m类型。
典型的命令:
1  | $ ctags --c-kinds=+p -R . | 
如果当前目录有tags文件,vim启动时会自动添加。也可以手动添加:
1  | : set tags+=/path/to/tags | 
如果只有一个tags使用=代替+=也是可以的。
当然set语句,也可以直接放在.vimrc中,这样所有的vim,在启动时,都添加。
查询
Ctrl + ] 查询光标处的引用
命令查询
: tag name
: ta name