ctags这个是vim的一个插件,它可以用来生成一个检索文件,里面保存有一些索引信息。例如,一些类跟方法、变量等的定义位置
当我们对一个路径执行ctags -R的时候,就会自动生成一个ctags,然后我们就可以使用一些快捷键来是实现跳转、搜索等操作了
其中

<C-]>-这个命令可以使我们跳转到光标所在位置变量定义的地方

感觉这个ctags生成索引的时候,应该是对变量定义有一定的语法识别的。
比如,对于下面一段代码

private int a = 35;
a =56;

当我们把光标放到第二行的a上,然后我们进行<C-]>的时候,光标就会跳到第一行
上面的情况是,我们的a定义跟调用的是同一个文件,即使不在同一个文件,上面也是可以跳转的。
例如
我们在test_2.java 中有如下内容

if (aaa == 40) {
aaa = 40;
}

在test_3.java中有如下内容

private aaa = 67;

然后我们执行ctags -R *.java以后。然后我们把光标放到aaa == 40的aaa上,然后我们进行<C-]>的时候,光标就会跳转到test_3.java的 private aaa = 67;上
上面说的是变量只在一个地方定义,那如果我们变量定义的地方不止一处,又会怎么样呢?
我们还是以上面的例子为例,不过,这次我们添加一个test_4.java。它里面的内容也是 private aaa = 67;这时候我们执行同样的操作,会发现跳转到了test_3.java处了。如果我们这时候再看tags文件就不难理解为什么会这样了。

aaa     test_4.java     /^private int aaa = ;$/;"     external variable declarations
aaa test_3.java /^private int aaa = ;$/;" external variable declarations

所以,它应该是从tags中搜索,当第一次搜索到这个变量的时候,就会跳转了。为了验证猜想的是否正确,我特意把上面两行在tags中的位置调换了一下,然后重>复上面的操作,光标就跳转到test_4.java上了。你还可以发现,如果当前缓冲文件中有这个变量定义的话,它的优先级是最高的。
那如果我们不想直接跳转到它默认定义的地方,而是想自己选择,这时候我们就可以使用

g<C-]>

命令了。
既然ctags支持的是索引,搜索结果是一个列表,这个就不仅让我们联想到vim操作结果的常用方式next prev等。具体如下

tselect-调出最后一次C-]搜索结果.如果我们已经有了搜索记录,那么堆栈中会保留记录
tnext-搜索结果下一条
tprev-搜索结果前一条
tfirst-搜索结果第一条
tlast-搜索结果最后一条

当然,这些命令,还是建议配置快捷键的
除了我们把光标放到目的字符串上来调用<C-]>,我们还可以直接使用命令行

:tag {keyword} -等效于<C-]>

:tjump{keyword}-等效于g<C-]>

命令行更有优势的一点是,它还可以支持正则表达式搜索。这时候命令为

:tag /{keyword}

:tjump/{keyword}

ctags 寻找方法定义处的更多相关文章

  1. Cannot refer to the non-final local variable user defined in an enclosing scope 内部类定义在方法内,方法定义的参数(形参)无法被内部类直接访问,需要用final定义

    为什么匿名内部类参数必须为final类型 1)  从程序设计语言的理论上:局部内部类(即:定义在方法中的内部类),由于本身就是在方法内部(可出现在形式参数定义处或者方法体处),因而访问方法中的局部变量 ...

  2. DEX文件解析--6、dex文件字段和方法定义解析

    一.前言    前几篇文章链接:       DEX文件解析---1.dex文件头解析       DEX文件解析---2.Dex文件checksum(校验和)解析       DEX文件解析--3. ...

  3. C#部分方法定义

    C#部分方法定义 部分类也可以定义部分方法.部分方法在部分类中定义,但没有方法体,在另一个部分类中执行.在这两个部分类中,都要使用partial关键字. public partial class My ...

  4. 面向对象(类,实例变量,方法定义,方法重载,构造方法,this,string类)

    面向对象 类是由属性和方法组成 类是所有创建对象的模板 实例变量有默认值 实例变量至少在本类范围中有效 实例变量与局部变量冲突时,局部变量优先 类中方法定义类似于函数定义 修饰符 返回值类型 方法名( ...

  5. SpringData系列三 Repository Bean 方法定义规范

    本节主要介绍Repository Bean中方法定义规范. 1.方法不是随便声明,需要符合一定的规范. 2.按照Spring Data的规范,查询方法以find|read|get开头,涉及条件查询时, ...

  6. 超文本传输​​协议 - HTTP / 1.1(Hypertext Transfer Protocol -- HTTP/1.1)之方法定义(Method Definitions)

    9方法定义 下面定义了HTTP / 1.1的一组常用方法.尽管可以扩展这个集合,但是另外的方法不能假定为单独扩展的客户端和服务器共享相同的语义. 主机请求头域(14.23节)必须伴随所有的HTTP / ...

  7. Java中方法定义和调用的学习

    方法其实就是若干语句的功能集合. 参数(原料):就是进入方法的数据.返回值(原产物):就是从方法中出来的数据. 定义方法的完整格式:修饰符  返回值类型  方法名称(参数类型 参数名称,...){ 方 ...

  8. Spring Data JPA 简单查询--方法定义规则

    一.常用规则速查 1  And 并且2  Or  或3  Is,Equals 等于4  Between  两者之间5  LessThan 小于6  LessThanEqual   小于等于7  Gre ...

  9. 错误 在类中找不到main方法请将main方法定义为 public static void main String args否则JavaFX应用程序类必须扩展javafx-ap

    最近在使用eclipse编写java程序时遇到这样一个问题: 错误在类中找不到main方法,请将main方法定义为 public static void main(String[] args)否则 J ...

随机推荐

  1. html中隐藏一个元素的方法

    display:none;                                                      隐藏不占位 opacity:0; fliter:alpha(opa ...

  2. 200 from memory cache / from disk cache / 304 Not Modified 区别

    三者情况有什么区别和联系,什么情况下会发生200 from memory cache 或 200 from disk cache 或 304 Not Modified? 200 from memory ...

  3. Windows Server 2012 r2 显示计算机图标

    在 Windows Server 2012 R2 系统中,微软取消了服务器桌面个性化选项,如何重新调出配置界面,在桌面上显示计算机图标,本文为大家介绍一下! Win2012我的电脑怎么显示到桌面? 一 ...

  4. 如何使 nginx 支撑更高并发

    /** * * * * 如何使 nginx 支撑更高的并发? * 原理: * 服务器方面可以从两个方面阐述: * 1.socket 链接方面:因为每次请求都是一次连接,而 nginx 服务器配置方面默 ...

  5. js对浏览器产生的影响

     Js 是单线程执行引擎.在我们动态修改一些属性时会产生两种效果:    1.Repaint ----- 一部分重画,修改 div 的颜色呀,但是尺寸没有改变.    2.Reflow ---- 元素 ...

  6. [洛谷P1343]地震逃生

    题目大意:有n个点m条单向边,每条边有一个容量.现有x人要分批从1走到n,问每批最多能走多少人,分几批运完(或输出无法运完). 解题思路:一看就是网络流的题目.每批最多能走多少人,即最大流.分几批运完 ...

  7. Lenovo k860i 移植Android 4.4 cm11进度记录【上篇已完结】

    2014.5.16 为了验证一下下载的CM11的源码有没有问题,决定编译一下cm官方支持的机器,手上正好有台nexus7 2012,就拿它为例测试一下在mac os x平台的整个编译过程. 1. 最开 ...

  8. CMSIS-RTOS 简介

    CMSIS-RTOS API是基于Arm®Cortex®-M处理器的设备的通用RTOS接口.CMSIS-RTOS为需要RTOS功能的软件组件提供标准化API,从而为用户和软件行业带来了巨大的好处. C ...

  9. HDU 4406 GPA

    GPA Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 440664 ...

  10. HBase 1.1.2 优化插入 Region预分配

    预分Region 与 不预分Region 的测试: 1 不预分Region:       23~29秒插入100W数据   并且蛋疼的是每次都写入一个 RegionServer 且  只在一个 Reg ...