• 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}

  • 相关阅读:
    使用python对mysql主从进行监控,并调用钉钉发送报警信息
    CentOS7下安装gitlab
    nginx日志自动切割
    Mysql定时备份数据脚本
    Linux下搭建FTP服务
    linux系统盘使用率达到100%的问题查找和解决方法
    CentOS6.5+nginx+mysql+php(laravel)服务器环境搭建
    RHEL6和RHEL7恢复root用户密码
    在Dell R720服务器上安装ESXI5.5时会出现卡在LSI_MR3.V00的解决方法
    /23 /24 /26/28 /29 /30或10.0.0.1/29这样怎么算服务器IP数是多少?
  • 原文地址:https://www.cnblogs.com/zhangshuli-1989/p/hq_15_12_20_01_25.html
Copyright © 2020-2023  润新知