ctags gun/global
C and C++
1. 通常使用 ctags
ctags -R . -f .tags
-R
从当前目录递归开始生成 ctags 索引.
当前目录-f
-o
指定生成的文件名
ctags -R --c-kinds=+p --fields=+iaS --extra=+q . -f .tags
获取更多的信息
2. 一些 ctags 基础参数
- ctags 支持多种语言的索引
ctags --list-maps
查看支持的语言种类
- ctags 支持很多语义但并不是默认都开启的
ctags --list-kinds
查看所有语言支持的语义及默认开启状态(后面有off
表示默认没有开启)ctags --list-kinds={lang}
查看{lang}语言支持的语义及开启状态- 使用
ctags --{lang}-kinds=+px
来开启默认不支持的语义
ctags --langmap={lang}:+.inl
可以指定某种扩展名也为该 lang 的源文件ctags -h +.inc
指定.inc
文件也为头文件ctags --fields=+aiKSz
如何描述语法元素a
表示如果是类的成员, 要标明其 access 属性(即是 public 的还是 private 的)i
表示如果有继承, 要标明父类S
表示如果是函数, 要标明函数的 signatureK
表示要显示语法元素类型的全称z
表示在显示语法元素的类型时, 使用格式 kind:type
ctags --extras=+q
要求 ctags 记录全名(类和函数名), 可以更精确的定位ctags --exclude=lex.yy.cc
不要扫描某些目录或文件
3. ctags 使用
使用
ctags -R --c-kinds=+p --fields=+iaS --extras=+q /usr/include
将可以创建外部的跳转, 但会使用很长的时间, 得到的文件一般也很大可以只创建当前文件包含的头文件的索引
#! /bin/bash
# ./ctags_with_dep.sh file1.c file2.c -Ifreetype ... to generate a tags file for these files.
gcc -M "$@" | sed -e 's/[\\ ]/\n/g' | \
sed -e '/^$/d' -e '/\.o:[ \t]*$/d' | \
ctags -R -L - --c++-kinds=+p --fields=+iaS --extras=+q -f .rtags
Example
# 这将创建 dwm 的外部文件索引
gcc -M -I/usr/include/freetype2 dwm.c | \
sed -e 's/[\\ ]/\n/g' | \
sed -e '/^$/d' -e '/\.o:[ \t]*$/d' | \
ctags -L - --c-kinds=+p -f .rtags
python
ctags -R --fields=+l --languages=python --python-kinds=-iv -f ./tags ./
- python use ctags with vim