1、tag是一个位置,记录了关于一个标识符在哪里被定义的信息。这种tag聚集在一起被放入一个tags文件,这个文件可以让Vim能够从任何位置起跳达到tag所指示的位置--标识符被定义的位置。
对于程序来说,Tag文件中保存了诸如函数、类、结构、宏等的名字,它们所处的文件,以及如何通过Ex命令跳转到这些标签。它是一个纯文本文件,因此你可以手工的编辑它,也可以使用脚本对其进行操作。
2、生成tags
ctags -R //当前目录的所有子目录
ctags *.cpp *.h
:set tags=tags; //设置tags选项为当前目录下的tags文件;如果当前目录找不到文件tags,则往上一层目录查找,直到找到。
3、跳转命令
ctrl + ] | 跳转函数、宏 |
ctrl + o | 回到跳转前的地方 |
ctrl + T | 跳到标签栈中较早的标签 |
| 在shell命令行中输入"vim -t 函数名" 直接打开文档并跳转函数 |
:tag | 函数名(不分大小写) 跳转函数 |
:tags | 显示跳转标签栈 |
ptag name | 打开包含当前name的预览窗口,通过pclose关闭 |
pedit name | ptag 打开的文件只读,pedit可写 |
tnext,tselect | tnext可以到下一个tag;tselect,vi会列出所有相关tag |
psearch | 查找tag |
help 29.1 | tags的help |
4、其他注意点
1)不是tags当前[子]目录需要为vi指定路径。例 :set tags=/home/test/tags
2)set nocompatible //不要vim模仿vi模式,否则会有很多不兼容的问题
3)set nowrap 不自动换行
4)一般来说,我们会先执行 ctags -R /usr/include/* 生成一个tags文件,然后用 ctags -a -R <our project root directory>来把我们项目文件中的变量、函数定义追加到上面生成的那个tags文件中,这样就生成了一个包含linux声明和我们代码声明的一个tags文件。
5)vi有具有如同source insight的功能,如插件taglist,参见【5】
参考
【1】 tags简单讲解
http://blog.tianya.cn/blogger/post_show.asp?BlogID=1104557&PostID=13677102
【2】 关于tags及更高级使用的讲解
http://www.cnblogs.com/striveford/articles/1950331.html
关于ctags的下载安装
http://xfenoo.blog.51cto.com/747433/275308
【4】 对tag进行了详细的讲解
http://easwy.com/blog/archives/advanced-vim-skills-use-ctags-tag-file/
http://edt1023.sayya.org/vim/node13.html
【5】 更多关于vim
http://easwy.com/blog/archives/advanced-vim-skills-catalog/
【6】 其他
http://www.cnblogs.com/super119/archive/2011/04/05/2005619.html