安装

在linux系统中安装只需要一行指令

1
sudo apt install ctags

指令

终端中指令

创建索引文件

ctags 其它的指令使用的前提都是为操作的文件建立索引文件的基础上进行的,所以在使用 ctags 对文件进行检索之前,先执行命令如下指令来创建索引文件

1
ctags -R .

可以在该指令之后添加参数,参数具体说明看下述 ctags参数,例如

1
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q /usr/include

生成的tags文件所描述的符号信息都只针对当前项目源代码树中的文件,而不包含任何外部文件的符号信息,例如标准头文件(例如 <stdio.h><stdlib.h> )等,因此 vim 无法在外部头文件中找到符号

利用 ctags 查找变量或者函数名

1
vi –t variable_name/function_name

ctags参数

  • --list-maps ctags可以根据文件的扩展名以及文件名的形式确定该文件是何种语言。用—list-maps查看默认情况下支持那些语言,每一种支持的语言支持的文件扩展名是什么
  • --list-kinds 查看默认支持的所有语言可以识别的语法元素
  • --c++-kinds ctags 可以识别很多元素,但并不会全部记录,可以控制 ctags 记录的语法元素的种类
  • --langmap 可以指定ctags用特定语言的分析器来分析某种扩展名的文件或者名字符合特定模式的文件
  • -h 用于指定一些其它后缀名的文件也是头文件
  • --fields ctags 对语法元素的描述取决于语法元素的种类。可以在命令行中指定显示哪些描述,以哪种格式显示等
    • i 表示如果有继承,标明父类
    • a 表示如果是类的成员,要标明其 access 属性 public or private
    • S 表示如果是函数,要标明函数的 signature
    • K 表示要显示的语法元素类型的全称
    • z 表示在显示语法元素的类型时,使用格式 kind:type
  • --extra ctags 在记录成员函数时,默认情况下 tag 的名字只包括该函数的名字,不包括类名,这样很多不同类但同名的函数所对应的 tag 名字都一样。于是在 vim 中使用函数名来定位时就会出现很多选择,很麻烦。如果想用包括类名的函数全名进行定位,就得要求 ctags 记录全名
  • --exclude 默认 ctags 是会扫描所有文件的,可以要求 ctags 不要扫描某些目录或文件

vim中常用指令

常用指令 作用
ctrl+] 跳转到光标所在变量,宏,函数的定义处
ctrl+T 返回跳转前的位置
ctrl+W+] 分割当前窗口并且在新窗口中显示跳转到的定义
ctrl+O 返回之前的位置
:ts tags 列出所有匹配的标签