1. 概述

一般来说,在代码中跳转,离不开 ctags。

实际上,vim 中代码跳转是由 vim tags 模块完成的,tags 模块依赖于 tags 文件。

ctags(Generate tag files for source code) 是产生 tags 文件的。

tags 文件只包含了函数、类、变量的定义的信息,而没有包含使用信息。

如果要知道一个函数都在什么地方使用过,需要使用 cscope。

2. tags 文件的生成与更新

ctags 默认是不会自动生成 ctags 文件的,常用的 3 个生成命令如下:

$ ctags *
$ ctags -R
$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
  • -R: 循环生成子目录的 tags
  • *: 当前目录下的所有文件,不递归
  • –c++-kinds=+px : 记录 c++ 文件中的函数声明和各种外部和前向声明
  • –fields=+iaS : ctags 要求描述的信息,其中i表示如果有继承,则标识出父类;a 表示如果元素是类成员的话,要标明其调用权限(即是 public 还是 private);S 表示如果是函数,则标识函数的 signature。
  • –extra=+q: 强制要求ctags做如下操作—如果某个语法元素是类的一个成员,ctags默认会给其记录一行,可以要求ctags对同一个语法元素再记一行,这样可以保证在VIM中多个同名函数可以通过路径不同来区分。

3. 常见功能与快捷键

详细的说明,见 vim 的 tags 帮助文档。

:help tags

命令、快捷键、功能描述如下:

  • CTRL+]        :tag tagname     跳转到定义处
  • CTRL-W ]     :stag tagname    新窗口中打开并跳转到定义处。split 后执行  tag tagname
  • CTRL+T                               CTRL+] 的反操作,向回跳转。类似 CTRL+o,区别在于,CTRL+o 的跳转不局限于 CTRL+] 构成的调用树。

对于存在多个匹配的 tag(如, 在 .h 和  .cpp 中都声明或者定义的方法名):

  • :ts[elect]                 列出所有匹配的 tag
  • :[count]tp[revious]  跳转至前 count 个 tag 处。
  • :[count]tn[ext]        跳转至后 count 个 tag 处。

4. Vim + ctags 配置

set tags=tags;  " ; 不可省略,表示若当前目录中不存在tags, 则在父目录中寻找。
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

vim 的 tags 模块 与 ctags的更多相关文章

  1. vim之tags

    好长时间没有上来更新了, 今天趁老板不再上来休闲一下. 本章要说的是和vim的tags相关的内容. 之所以在跳转之后就说明tags是因为这个功能相当的重要和实用. 好的东西自然是需要提前分享的. 首先 ...

  2. vim 解决tags递归查询问题

    今天在vim下配置了两个插件,分别是exuberant-ctags 跟cscope.这两个插件主要是用来实现类.方法查询跟跳转.至于它们如何安装跟使用,网上教程一大堆,我也是按着别的大神教程一步步来的 ...

  3. 使用VIM插件ctags来阅读C代码

    说明 Ctags是vim下方便代码阅读的工具.尽管ctags也可以支持其它编辑器,但是它正式支持的只有vim.并且vim中已经默认安装ctags,它可以帮助程序员很容易地浏览源代码:ctags最先是用 ...

  4. vim下使用ctags+taglist

    好几年前用过,但是后来就生疏了,好其次都没法鼓起勇气再捡起来...今天不得不用,那既然捡起来了,就好好的记录一下. 简介及安装 ctags是一个应用程序,可以用它来生产当前目录下所有c文件中变量和函数 ...

  5. ctagst简单应用,将Vim改造:Ctags,Taglist,Cscope,OmniCppComplete,SuperTab,Winmanager,NERDTree,MiniBufExplorer,vimrc

    vim + ctags $ ctags #给同一个目录下的所有文件建立tags 这时在tags文件所在的目录下打开源文件阅读,vim就会自动调用tags文件.如果tags文件不在当前目录下,能在命令模 ...

  6. vim+ctags+cscope工具

    最近在看一个开源的项目,突然发现在Linux上不知道有什么方便的工具来看开源代码.以前,在Windows上用VS2010集成开发环境,对于任意一个函数直接有快捷键跳转到函数定义处.可现在在Linux上 ...

  7. 【转】将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)

    原文网址:http://blog.csdn.net/bokee/article/details/6633193 工欲善其事,必先利其器.一个强大的开发环境可以大大提高工作效率.好吧,我知道这是废话.. ...

  8. vim Ctags 和taglist安装和使用

    Ctags是一个用于从程序源代码树产生索引文件(或tag文件),从而便于文本编辑器来实现快速定位的实用工具.在产生的tag文件中,每一个tag的入口指向了一个编程语言的对象.这个对象可以是变量定义.函 ...

  9. 创作gtk源码级vim帮助文档 tags

    创作gtk源码级vim帮助文档 tags 缘由 那只有看到源码了.在linux源码上有个网站 http://lxr.linux.no /+trees, 可以很方面的查出相应版本的代码实现,gtk没有. ...

随机推荐

  1. cc2530 timer 3 PWM <可调占空比>

    前提: 开始用的是 cc2530 timer 1来做PWM的,已经可调占空比了,但是由于硬件的改动,需要用timer 3 和 timer 4 代替.由于调试过程中出了些小问题,于是自己把这个贴出来.关 ...

  2. UIPickerView用法(左右比例,整体大小,字体大小)

    UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:CGRectZero]; pickerView.autoresizingM ...

  3. 作为平台的Windows PowerShell(二)

    在此系列文章的前一篇,我们看到了怎样使用System.Management.Automation.PowerShell 类来在c#应用程序中运行PowerShell 命令.在那些例子中,我们创建的都是 ...

  4. android常见错误-The container 'Android Dependencies' references non existing library

    The container 'Android Dependencies' references non existing library

  5. POJ 1273 || HDU 1532 Drainage Ditches (最大流模型)

    Drainage DitchesHal Burch Time Limit 1000 ms Memory Limit 65536 kb description Every time it rains o ...

  6. 【翻译自mos文章】DBA_JOBS 和 DBA_JOBS_RUNNING 不同的结果的解释

    DBA_JOBS 和 DBA_JOBS_RUNNING 不同的结果 參考原文: Different Results from DBA_JOBS and DBA_JOBS_RUNNING (Doc ID ...

  7. 配置Ubuntu开发环境

    前言 新买了一台ThinkPad E431,主要看中了硬盘500G和7200转/分钟的速度,因此准备从x220上把工作环境迁移到新买的笔记本上. 为什么不要公司的电脑,是由于160G的ssd硬盘实在是 ...

  8. 句柄(Handle)

    1.句柄是什么?    在windows中,句柄是和对象一一对应的32位无符号整数值.对象可以映射到唯一的句柄,句柄也可以映射到唯一的对象.2.为什么我们需要句柄?     更准确地说,是window ...

  9. [Effective C++ --011]在operator=中处理“自我赋值”

    一.何谓“自我赋值”? 1.1.场合一 直接赋值 w = w; 1.2.场合二 同一数组         a[i] = a[j]: 1.3.场合三 指针         *px = *py: 1.4. ...

  10. Ruby简介,附带示例程序

    Ruby语言是日本人松本行弘于1993年器开始着手研发,经历2年时间,发布了Ruby语言的第一个版本:0.95版.     Ruby是一种非常简介的解释性语言,一种纯粹的面向对象编程语言,甚至比Jav ...