在程序开发过程中,程序猿经经常使用到的一个功能就是查找引用(Find Reference)。Visual Studio里面的相应功能是“查找全部引用”(Find All References)。

我在使用notepad++写代码的时候一開始一直由于找不到类似的功能而苦恼。仅仅好每次使用“在文件里查找”(Find in files)来找到全部引用。

可是这样每次查找都须要遍历目标文件夹的整个文件系统,文件多的话会耗费非常长时间。

notepad++有插件能够实现查找引用的功能。相比于搜索整个文件系统,这样的插件仅仅须要运行一次生成关键词索引,后面就仅仅须要在关键词索引里面查找即可了。速度非常快,出结果是瞬间的。并且后面即使你改动了文件也不须要又一次生成关键词索引数据库,由于在保存该文件的同一时候就会自己主动更新关键词索引数据库。

这个插件就是NppGTags。

NppGTags的默认解析器是仅仅针对C, C++, Yacc, Java, PHP4和汇编的源文件的。可是略微改一下配置就能够支持lua、python或者其它类型的语言了。

在NppGTags文件夹以下(取决于你的notepad++安装文件夹。我的是C:\Program Files (x86)\Notepad++\plugins\NppGTags)有一个文件gtags.conf有一个文件gtags.conf

这里面指定了在使用非默认的解析器时对不同的语言用不同的解析器文件(dll)。

往上翻发如今使用build-in的解析器的时候指定了不同的语言相应的文件后缀名!于是我猜想这里加入.lua就能支持lua文件的关键词索引数据库创建。

例如以下所看到的:

接下来(确保在setting里面切回默认解析器,而不是pygments或ctags。

假设没有改过setting那么就肯定是默认解析器,不须要做切换。),然后点击插件->NppGtags->Create Database创建索引数据库。然后选中关键词后就能够查找引用(点击插件->NppGtags->Find Reference)了,结果例如以下图所看到的(查找结果在最以下的窗体。这里是查找对”rect“的引用):

配合快捷键使用就非常方便了。

我一般对Find Reference设置快捷键ctrl+shift+G,选中关键词后按快捷键就能得到查找引用的结果了。从查找结果中双击能够进入源文件相应位置进行查看改动。

将光标定位在单词上(不须要选中)也能进行该单词的查找引用。假设想要对某个keyword查找引用。但不知道该keyword出如今哪个文件中,仅仅须要将光标定位在随意非单词处(比方空行处。或者一个括号结束的地方等等)。再进行查找引用(快捷键或者菜单进入)。就会出现查找引用的窗体,这里还会有keyword代码提示功能。

同理,其它语言仅仅须要将相应源文件的后缀名按相同的方法增加gtags.conf就能够使用查找引用了(比方仅仅须要在gtags.conf相应位置增加.py就能支持python文件的查找引用了)。怎么样,还是非常酷的吧 :D

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

以下是找到怎样处理非c c++文件(我这里是尝试lua文件)之前的一些尝试。仅作记录:

这个插件的官方声明里是这样说的:GTags built-in code parser supports C, C++, Yacc, Java, PHP4 and Assembly. Other languages are supported through Pygments + CTags parser.就是说默认的(内建的)语法解析器仅仅支持C C++ Yacc Java PHP4和汇编语言,而可选的Pygments和CTags parser这两个解析器是能够支持其它语言的。我用notepad++是开发lua脚本的,所以看来仅仅能选择后两种解析器了。

但是CTags
parser实际上仅仅能用到Find Definitions而Find Reference(查找引用)这个功能没实用。Pygments这个一直不能成功使用,提示"gtags: cannot open shared object 'pygments-parser.dll'.

发现lua不能被支持挺沮丧的。只是后来试了一下将.lua后缀名改成.c后居然能用!

于是想了一下将整个project文件下的.lua重命名为.c或.hpp来支持lua的查找引用。我也实际写了个脚本这么做了,能够这样查找全部的引用。可是执行的时候还是须要.lua。

假设复制一份并改动复制的.lua为.c或.hpp。则无法在完美支持查找引用的同一时候进行改动。由于改动了以后须要将对应的改动应用到改动了后缀名的文件上,而且查找引用里面的点击跳转无法跳转到.lua文件,仅仅能跳转到改了后缀名的文件中面。这样无法及时对对应lua文件进行改动。

最后在查找pygments不能使用(由于网上有人说跳出提示说pygments-parser.dll打不开的原因是指定的路径不正确)的过程中发现改动gtags.conf文件能够达到我们想要的目的。:)

另外一个同类型的插件在plugin manager里面叫“Gtags Search",安装好后叫做"gtagfornplus"。可是经过试用,我发如今当前最新版本号(6.7.9.2)的notepad++中无法使用。用法參见:http://sourceforge.net/p/gtagfornplus/code/HEAD/tree/

notepad++ 查找引用(Find Reference)(适用于c c++及各类脚本比方lua、python等)的更多相关文章

  1. notepad++ 查找引用(Find Reference)(适用于c c++及各类脚本比如lua、python等)

    在程序开发过程中,程序员经常用到的一个功能就是查找引用(Find Reference),Visual Studio里面的对应功能是“查找所有引用”(Find All References). 我在使用 ...

  2. Notepad++查找和替换空行/空格/换行

    Notepad++查找和替换支持正则表达式,功能很强大,但比较复杂因此暂不研究 Notepad++使用正则表达式查找,首先需要勾选查找/替换窗口左下部的“正则表达式(E)”\r\n表示换行,其中\r表 ...

  3. 方法引用(Method reference)和invokedynamic指令详细分析

    方法引用(Method reference)和invokedynamic指令详细分析 invokedynamic是jvm指令集里面最复杂的一条.本文将详细分析invokedynamic指令是如何实现方 ...

  4. 个人永久性免费-Excel催化剂功能第38波-比Vlookup更好用的查找引用函数

    谈起Excel的函数,有一个函数生来自带明星光环,在表哥表姐群体中无人不知,介绍它的教程更是铺天盖地,此乃VLOOKUP函数也.今天Excel催化剂在这里冒着被火喷的风险,大胆地宣布一个比VLOOKU ...

  5. Java中的函数式编程(四)方法引用method reference

    写在前面 我们已经知道,lambda表达式是一个匿名函数,可以用lambda表达式来实现一个函数式接口.   很自然的,我们会想到类的方法也是函数,本质上和lambda表达式是一样的,那是否也可以用类 ...

  6. Java引用机制——reference

    所谓引用传递就是指将堆内存空间的使用权交给多个栈内存空间. 例子<1> public class Aliasing { int temp = 30; public static void ...

  7. 【Unity3D】中的空引用 Null Reference Exception

    Null Reference Exception : Object reference not set to an instance of an object. 异常:空引用,对象的引用未设置到对象的 ...

  8. C++引用(Reference)

    引用(Reference)是C++语言相对于C语言的又一个扩充,类似于指针,只是在声明的时候用&取代了*.引用可以看做是被引用对象的一个别名,在声明引用时,必须同时对其进行初始化.引用的声明方 ...

  9. 关于重复记录和外部 ID (CRM导入提示已找到重复的查找引用)

    http://docs.huihoo.com/oracle/crm-on-demand/21/local/html/Release21_SimpleChinese/index.htm?toc.htm? ...

随机推荐

  1. ArrayList 和 LinkedList 区别。

    1. ArrayList和LinkedList都是实现了List接口的容器类,用于存储一系列的对象引用.他们都可以对元素的增删改查进行操作. 2. ArrayList是实现了基于动态数组的数据结构,L ...

  2. (二十一)python 3 内置函数

    阅读目录 1.abs() 2.dict() 3.help() 4.min() 5.setattr() 6.all() 7.dir() 8.hex() 9.next() 10.slice() 11.an ...

  3. ArrayList练习之存储字符串并遍历

    在myArrayList项目下 新建一个包 在这个包中新建一个类:ArrayListDemo4.java ArrayListDemo4.java import java.util.ArrayList; ...

  4. luoguT21778 过年

    差分一下上线段树 #include <iostream> #include <cstdio> #include <vector> using namespace s ...

  5. cf837d Round Subset

    设dp[i][j][k]表示前i个数中选j个并且因子含有k个2的能获得的最多的5的个数 则dp[i][j][k]=max(dp[i-1][j][k],dp[i-1][j-1][k-cnt2]+cnt5 ...

  6. 跟初学者学习IbatisNet第三篇

    这一章我们主要介绍一下IbatisNet里面的动态sql语句的运用,比如有时候我们想进行模糊查询,参数是动态加入的.或者要实现top n ,order by ,分页等功能的时候,我们就不得不用动态拼接 ...

  7. [HNOI2012] 永无乡 题解

    题意: n个点,有加边操作,询问与某一点处于相同的联通块的点中权值第k大的点 思路: 对所有点建立一棵权值线段树,加边就配合并查集进行线段树合并 反思: 动态开点,权值线段树要用sum[g[x=fin ...

  8. POJ 1386 单词接龙问题

    题目大意: 给一堆字母,让它们进行接龙,要头对尾能够接的上,问有没有一种方法让所有成语都完成接龙 这道题实际上是在考虑是否存在一条欧拉通路,每个单词产生一条有向线段,由第一个字母指向最后一个字母 这道 ...

  9. 搭建nexus私服,无法下载相关jar包,报错Repository proxy-mode is BLOCKED_AUTO

    在搭建nexus私服的时候,之前没直接用来下载maven的相关插件jar包,一直可以使用, 结果今天要编译hadoop的时候,在linux上新用maven就报错了,无法下载maven的相关插件(如下) ...

  10. 如何改变linux系统的只读文件的权限

    vim 编辑可以在命令模式输入 :wq! 保存退出可以用chmod 命令修改文件权限. chmod命令是非常重要的,用于改变文件或目录的访问权限.用户用它控制文件或目录的访问权限.该命令有两种用法.一 ...