在程序开发过程中,程序员经常用到的一个功能就是查找引用(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,选中关键词后按快捷键就能得到查找引用的结果了。从查找结果中双击可以进入源文件对应位置进行查看修改。

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

同理,其他语言只需要将对应源文件的后缀名按同样的方法加入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 JavaPHP4和汇编语言,而可选的Pygments和CTags parser这两个解析器是可以支持其他语言的。我用notepad++是开发lua脚本的,所以看来只能选择后两种解析器了。可是CTags parser实际上只能用到Find Definitions而Find Reference(查找引用)这个功能没有用。Pygments这个一直不能成功使用,提示"gtags: cannot open shared object 'pygments-parser.dll'.

发现lua不能被支持挺沮丧的。不过后来试了一下将.lua后缀名改成.c后竟然能用!于是想了一下将整个工程文件下的.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 Refer ...

  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. C#使用ICSharpCode.SharpZipLib.dll进行文件的压缩与解压

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  2. 用 Swift 开发一个 TODO 应用

    背景 相信不少 iOS 程序员对于 Swift 依旧持以观望的态度,一来是这小家伙刚出来没几天,本身还处于完善的阶段:二来是学习的成本较高,看完官方文档怎么也要个几天的时间:三来是反正最近几年很难在工 ...

  3. 利用JavaScript的%做隔行换色

    <html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...

  4. Linux vi命令快操作汇总

    第一部份:一般指令模式可用的按钮說明,游标移动.复制粘贴.搜寻取代等 一.移动游标的方法h 或 向左方向鍵(←) 游标向左移动一个字节j 或 向下方向鍵(↓)   游标向下移动一个字节k 或 向上方向 ...

  5. VFS文件系统结构分析 与socket

    本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载.但转载请保持文档的完整性,并注明原作者及原链接.内容可任意使用,但对因使用该内容引起的后果不做任何保证. 作者:fireaxe_hq@ho ...

  6. TCP连接的建立以及利用tcpdump分析连接建立的过程(转)

    原文地址:http://www.cnblogs.com/coser/archive/2010/12/05/1968812.html 一.实验目的 实验1_1: 使用Freebsd/Linux操作系统下 ...

  7. 洛谷P2827 蚯蚓 队列 + 观察

    我们不难发现先被切开的两半一定比后被切开的两半大,这样就天然的生成了队列的单调性,就可以省去一个log.所以,我们开三个队列,分别为origin,big,smallorigin, big, small ...

  8. 洛谷P1540 机器翻译 水题 模拟

    注意一下细节,尤其是更新minv时不要更新错. Code: #include<vector> #include<iostream> #include<cstdio> ...

  9. MaterialDesign动画

    一.概述 MaterialDesign设计理念 MaterialDesign动画 二.实例讲解 (1)Touch Feedback (2)Reveal Effect (3)Activity Trans ...

  10. windows端口被占用解决办法

    1.查找端口 netstat -ano | findstr 端口号 2.进程列表并查找相应的进程 tasklist |findstr 进程号 3.杀死进程 taskkill /f /t /im 进程名 ...