0x00 为什么使用CTag
长久以来, 我一直在ide中使用VIM插件,除此之外在Bash,Zsh也使用vim作为基本的文本编辑器, 所有的Git操作也都都交给了VIM+ Shell,在文本编辑方面,我使用统一的一套快捷键方案
我使用过的IDE:visual studio
, visual studio code
, qt creator
他们都有很好的VIM插件,并且集成了很好的符号查找,所以作为实用主义者,我一直觉得没有使用CTag+VIM的必要
直到上周疯狂摸鱼后,被抓去写 C & Embedded, 我接触到了 Xilinx Vitis这款AMD旗下的IDE,这货竟然没有VIM键盘方案
整一周在这条路上我走得像一个瘸子,痛定思痛,我认为是时候端出CTag这根阵年火腿了
0x01 CTag安装+生成索引
0x0101 安装
由于编译服务器是Ubuntu,所以先只记录Ubuntu, 其他平台大差不差
|
|
0x0110 生成索引
写一个用于生成c/c++ tag的脚本 ctag.sh
|
|
-R
:递归处理当前目录及其子目录中的所有文件。
--languages=c,c++
:指定要处理的编程语言为 C 和 C++。
--exclude=node_modules
:排除 node_modules
目录,不处理该目录下的文件。
--c++-kinds=+p
:在 C++ 中包括函数原型(prototypes)标签。
--fields=+iaS
:为生成的标签添加额外的信息。
i
:包含继承信息(inheritance information)。a
:包含类成员的访问控制信息(access control information),如 public、protected 和 private。S
:包含标签的范围信息(scope information),即函数、类或结构体所在的范围。
--extra=+q
:为标签添加额外的扩展信息。
q
:包含类的构造函数和析构函数。
使用脚本
|
|
0x10 在VIM中使用CTag 索引
在.vimrc 中配置 tags的路径
|
|
在 Vim 中打开任何源文件,并使用以下基本命令:
键盘命令 | 行动 |
---|---|
Ctrl + ] 或 或g] :ta[g] Ctrl+rw |
使用标签文件中的信息跳转到光标下方的标签 |
:ts[elect] <tag_name> |
使用标签文件中的信息列出匹配的标签。如果未给出,则使用标签堆栈中的最后一个标签名称<tag_name>``<tag_name> |
:pts[elect] <tag_name> |
在不移动光标的情况下在“预览”窗口(水平拆分)中执行并显示新标签:tselect |
Ctrl + w } 或 :ptag Ctrl+rw |
打开一个预览窗口,其中包含标记定义的位置。光标不会更改其位置,因此不会更新标签堆栈 |
Ctrl + wz 或 :pc |
关闭命令创建的预览窗口Ctrl+w } |
Ctrl + w Ctrl + ] |
在水平拆分中打开定义 |
:tn |
跳转到下一个匹配标签(如果有多个匹配项) |
:tp |
跳转到上一个匹配标签(如果有多个匹配项) |
Ctrl-t |
在标签堆栈中跳回 |
:tags |
显示标签堆栈的内容。活动条目标有> <br / |
:tag 正则 | 用正则搜索tag |
也可以在shell中直接使用vim 打开 搜索的tag
|
|
0x11 其他补充
需要注意,修改程序后需要重新生成ctag,
0x1100 代码补全
生成ctags后也可以用地代码补全, ctrl+n, ctrl+p
0x1101 头文件切换
光标定位于#include gf 可以跳到头文件, 前是在.vimrc中配置了path+=path2include
也可以配置 在.vimrc 中配置path+=**
这样vim中使用 :find 就会递归搜索,
然后
: find %:r.c
切换到当前header对应的source
或
: find %:r.h
切换到当前source对应的header
Comments