zoukankan      html  css  js  c++  java
  • ctags 寻找方法定义处

    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 = 67;$/;"     external variable declarations
    aaa     test_3.java     /^private int aaa = 67;$/;"     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}

  • 相关阅读:
    java学习day28-jQuery(常用)
    在博客园上添加bilibili视频
    参数传递 实参
    linux 下office软件推荐
    桥后总结 二
    go基础笔记-包
    Linux:Day24(上)
    Linux:Day23(下) vsftpd
    Linux:Day23(上) MariaDB SQL语句
    Linux:Day22(下) php及mysql使用基础
  • 原文地址:https://www.cnblogs.com/zhangshuli-1989/p/hq_15_12_20_01_25.html
Copyright © 2011-2022 走看看