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. Metasploit渗透测试实验报告

    Metasploit渗透测试实验报告

  2. Hadoop的目录结构

  3. SVN冲突的解决过程

    此文教程只是个人记录使用,不建议当教程!(估计新手也看得懵) 改完之后Ctrl+s保存就好.

  4. [JLOI2011]飞行路线 分层图最短路

    题目描述: Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在nn个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一 ...

  5. 创建vue.js项目

    vue init webpack test cd test npm install 或者 cnpm install test npm run dev

  6. BZOJ 2724 [Violet 6]蒲公英(分块)

    题意 在线区间众数 思路 预处理出 f[i][j] 即从第 i 块到第 j 块的答案.对于每个询问,中间的整块直接用预处理出的,两端的 sqrtn 级别的数暴力做,用二分查找它们出现的次数.每次询问的 ...

  7. spring-data-jpa 新增 修改 删除 查询 分页

      1.查询所有数据 findAll() 2.分页查询 findAll(new PageRequest(0, 2)) 3.根据id查询 findOne() 4.根据实体类属性查询: findByPro ...

  8. WebService通讯技术的CXF框架问题

    WebService通讯技术的CXF框架问题 严重: Servlet /cxf_rs_spring threw load() exception java.lang.ClassCastExceptio ...

  9. parted---磁盘分区

    parted命令是由GNU组织开发的一款功能强大的磁盘分区和分区大小调整工具,与fdisk不同,它支持调整分区的大小.作为一种设计用于Linux的工具,它没有构建成处理与fdisk关联的多种分区类型, ...

  10. python异步IO-asyncio、async和await

    参考链接: asyncio:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00 ...