vim插件ctags的安装和使用

2013-11-19 20:47 17109人阅读 评论(0) 收藏 举报
 分类:
开发工具(3)  linux编程(9)  c/c++编程(11) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

【ctags功能】:

为源码的变量/对象、结构体/类、函数/接口、宏等产生索引文件,以便快速定位。目前支持41种语言,这里仅以C/C++为例:ctags可以产生c/c++语言所有类型的索引文件,具体如下:

[plain] view plaincopy
  1. -> class names(类名)
  2. -> macro definitions(宏定义)
  3. -> enumeration names(枚举名)
  4. -> enumerators(枚举变量)
  5. -> function definitions(函数定义)
  6. -> function prototypes/declarations(函数定义/声明)
  7. -> class, interface, struct, and union data members(类,接口,结构体,联合体)
  8. -> structure names(结构体名)
  9. -> typedefs(别名)
  10. -> union names(联合体名)
  11. -> variables (definitions and external declarations)变量

【ctags的安装】
1)在线安装:

sudo apt-get install ctags (ubuntu)

(RedHat系列使用:yum install ctags)
若不成功,可能是因为源的问题,换一下软件源update后重新执行上述命令即可。
2)手动下载安装:
下载地址
Official site: http://ctags.sourceforge.net/
VIM online: http://www.vim.org/scripts/script.php?script_id=610
参考步骤(以5.8版本ctags-5.8.tar.gz为例)
解压后
$ cd ctags-5.8
$ ./configure
$ make
# make install
安装结束后,使用ctags命令测试是否成功
或whatis ctags, whereis ctags等

【生成tags文件】
 安装成功后,要为源码文件生成tags文件,才可享受ctags为阅读代码带来的便利。

$ ctags -R
递归的为当前目录及子目录下的所有代码文件生成tags文件

为某些源码生成tags文件,使用如下命令
$ ctags filename.c filename1.c file.h 

$ ctags *.c *.h

为了使得字段补全有效,在生成tags时需要一些额外的参数,推荐的c++参数主要是:
ctags -R --c++-kinds=+px --fields=+iaS --extra=+q
其中:
选项c++-kinds 用于指定C++语言的 tags记录类型,  --c-kinds用于指定c语言的,  通用格式是  --{language}-kinds
选项 fileds 用于指定每条标记的扩展字段域
extra 选项用于增加额外的条目:   f表示为每个文件增加一个条目,  q为每个类增加一个条目

【使用方法】
在vim打开源码时,指定tags文件,才可正常使用,通常手动指定,在vim命令行输入:
:set tags=./tags(当前路径下的tags文件)
若要引用多个不同目录的tags文件,可以用逗号隔开

或者,设置 ~/.vimrc,加入一行,则不用手动设置tags路径:
set tags=~/path/tags

若要加入系统函数或全局变量的tag标签,则需执行:
ctags -I __THROW –file-scope=yes –langmap=c:+.h –languages=c,c++ –links=yes –c-kinds=+p --fields=+S -R -f ~/.vim/systags /usr/include /usr/local/include
并且在~/.vimrc中添加(亦可用上面描述的手动加入的方式):
set tags+=~/.vim/systags
这样,便可以享受系统库函数名补全、原型预览等功能了。

如果经常在不同工程里查阅代码,那么可以在~/.vimrc中添加:
set tags=tags;
set autochdir

设置好了tags文件,在定位变量/函数的定义时,最常用的快捷键是:
Ctrl + ]
跳转到变量或函数的定义处,或者用命令
:ta name
而使用快捷组合键
Ctrl + o/t 
返回到跳转前的位置。

另外,ctags不会生成局部变量的索引,不过可以使用gd组合键(对光标所在处的word进行快捷查找定位)来定位,也是相当快捷的。

$ vim -t myAdd
用vim打开文件时,添加参数-t funcName会自动打开定义该函数的文件并定位到定义首行,上面这句就是找到myAdd定义的文件打开并将光标置于定义的第一行处。

:tags 
会列出查找/跳转过程(经过的标签列表)

另外,附上vim环境中其他较为好用的快捷键:
* 定位至当前光光标所指单词的下一次出现的地方
# 定位至当前光光标所指单词的上一次出现的地方
n 定位至跳至已被标记出的单词下一次出现的地方
shift+n 定位至跳至已被标记出的单词上一次出现的地方

关于更详细的ctags用法,vim中使用
:help tags

ctags 的最简单使用相关推荐

  1. VIM中ctags的简单使用教程

    关于ctags的安装及配置等,请参考 Vim:打造Linux程序员的编辑利器(ctags+cscope+taglist+code_complete). 下面是关于ctags的几个常用快捷键. 注意: ...

  2. 【转】使用 vim + ctags + cscope + taglist 阅读源码

    原文网址:http://my.oschina.net/u/554995/blog/59927 最近,准备跟学长一起往 linux kernel 的门里瞧瞧里面的世界,虽然我们知道门就在那,但我们还得找 ...

  3. 王垠:我和Google的故事

    也许有人看见过我批判 Google 的那篇英文文章.它好像有一部分片面性,所以被我从英文博客上拿下来了.我一直在反思自己在 Google 的经历,因为在这个公司工作总是感觉不对劲,但是却总也说不清楚为 ...

  4. 王垠 我和Google的故事

    也许有人看见过我批判 Google 的那篇英文文章(Hacker News 上的讨论).它好像有一部分片面性,所以被我从英文博客上拿下来了.我一直在反思自己在 Google 的经历,因为在这个公司工作 ...

  5. vim+cscope+ctags打造属于自己的IDE

    所谓工欲善其事,必先利其器.作为专业码农,特别是长期在Unix系统上展开工作(查看源代码.coding)的码农,没有一个极致的IDE环境,工作效率会很受影响的.当然啥时候Unix系统如果有Visual ...

  6. win7系统中给GVim 配置ctags和taglist插件

    Vim安装ctags和taglist插件 通过ctags建立索引,可以用其浏览代码. 通过taglist可以在窗口中直接看到源代码的结构. ctags的安装 这个安装非常简单,在http://ctag ...

  7. 使用Vim+Ctags+Cscope阅读源代码

    2019独角兽企业重金招聘Python工程师标准>>> 因为所有设计思想.内部机制都是 以代码的形式实现,所有的资料也都是为了更好的诠释代码.那么一个好的阅读工具,能 够提高阅读的效 ...

  8. vim无法打中文_vim+ctags+cscope+Taglist+Nerdtree打造成sourceinsight

    听说vi很强大?是的,最近笔者需要在Linux下编写一些C代码和查看一些C源码,但是默认的vi并不支持函数之间的跳转.查看函数的定义等等,所以笔者就将vi打造成了一个ide(可以勉强称得上吧).首先我 ...

  9. ctags,cscope,nerdtree,tmux 笔记

    打造一个基础的VIMer需要配备的环境,开不开ctags, cscope(需求不大的时候也可以忽略), nerdtree,tmux.下面整理一下我的配置过程,以备不时之需. ctags相关 首先肯定是 ...

最新文章

  1. 文件批量重命名的技术,你值得拥有
  2. python基础考核试题及答案
  3. 怎么进入mysql workspace_MySQL 继续-- Win7 安装及后续工作
  4. 图像处理之基础---周末戏说卷积
  5. 小程序订单点击不同页面_小程序跳转页面参数丢失
  6. 2 resize 到指定大小_阿里巴巴为什么让初始化集合时必须指定大小?
  7. 剑指Offer #01 二维数组中的查找(Java描述)
  8. sql group by having用法_神奇的 SQL 为什么 GROUP BY 之后不能直接引用原表中的列?...
  9. 【学习笔记】观察者模式
  10. 爬虫 404 try_和我一起学爬虫
  11. python代码可以内嵌在asp文件中_在IE中使用Python作为开发脚本(转)
  12. 循环队列的介绍与实现
  13. docker-ovs遇到的问题以及解决办法
  14. 7-7 旅游规划 (25 分)
  15. 为什么阿里规定需要在事务注解@Transactional中指定rollbackFor
  16. 全国快递物流查询公司mysql数据库语句
  17. html英语单词不换行,css如何设置英文单词不换行?
  18. iReport简单使用
  19. 【转载】TextView源码解析
  20. 入网许可证_进网许可证、电信设备入网许可证详解!

热门文章

  1. 磁珠 符号_磁珠的主要功能是什么
  2. python百分号字符串_python--003--百分号字符串拼接、format
  3. python pyecharts 折线图_Python数据可视化之pyecharts实现各种图表
  4. c++常引用做参数可以有默认参数吗_最新Pandas.read_excel()全参数详解(案例实操,如何利用python导入excel)...
  5. vue 拷贝 数组_vue源码中值得学习的方法
  6. 阿里云服务器安装docker开发环境
  7. 华为手机坏了数据怎么导出_更换手机怎么把旧手机便签里的内容怎么全部导出到电脑...
  8. python open 函数漏洞_Python系列之——编写已知漏洞exp实现批量getshell
  9. 北美+德国18所名校数据科学课程汇总
  10. centos mysql lujin_MySQL中文转换成拼音的函数[zt]