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

在程序开发过程中,程序员经常用到的一个功能就是查找引用(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/

时间: 2024-10-26 01:28:11

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

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

在程序开发过程中,程序员经常用到的一个功能就是查找引用(Find Reference),Visual Studio里面的对应功能是"查找所有引用"(Find All References). 本人在使用notepad++写代码的时候一直因为找不到类似的功能和苦恼.只好每次使用"在文件中查找"(Find in files)来找到所有引用. 但是这样每次查找都需要遍历目标目录的整个文件系统,文件多的话会耗费很长时间. notepad++有插件可以实现同样的功能,但是相比

Google C++ Coding Style:右值引用(Rvalue Reference)

右值引用是一个C++11特性,标记为T&&.GSG中定义:只为移动建构函数(Move constructor)和移动赋值操作(Move assignment)使用右值引用.并且不要使用std::Forward(提供的完美转发特性). C++中右值指表达式结束时就不再存的临时对象.在C++11中,右值分为纯右值(即原始字面量,表达式产生的临时变量等),以及一个将亡值(expiring value, 使用<<深入应用C++11>>中的译法,指的是与右值引用相关的表达式,

JAVA实现EXCEL公式专题(六)——查找引用函数

查找引用函数主要有match.lookup.vlookup.hlookup这4种,这几个常用的方法也就不解释啦,直接上干货: /** * 项目名称: * 文件说明: * 主要特点: EXCEL公式类型:查找公式 * 版本号:1.0 * 制作人:刘晨曦 * 创建时间:2013-12-3 **/ package EXCEL; import java.util.Calendar; import java.util.Date; /** * @author lcx * */ public class Se

Excel查找引用函数之offset函数

在Excel中,offset函数是一个引用函数,表示引用某一个单元格或者区域.其也是我们日常做一些组合函数中的一种,需要熟练掌握. 1.offset函数的含义 以指定的(单元格或相连单元格区域的引用)为参照系,通过给定偏移量得到新的引用. 返回的引用可以是一个单元格也可以是一个区域(可以指定行列数). 注意事项 第一,如果行数和列数偏移量超出工作表边缘,函数 OFFSET 返回错误值 #REF!. 第二,如果省略 height 或 width,则假设其高度或宽度与 reference 相同. 第

Unity插件开发:SerializedObject/SerializedProperty&mdash;&mdash;查找引用的资源

        Unity有一个Find References in Scene功能非常好用.在Project面板中右键一个文件,选择Find References in Scene就可以在场景中找到所有存在对这个文件有引用的物体.但是很多时候,我们更加需要知道的是,这个场景里面到底引用了哪些文件,比如做优化的时候.         这里有一个插件叫做ResourceChecker,它可以列举出所有引用到的texture/mesh/mat等.但是他也有一个小小的问题,对于自定义脚本的引用没有效果

对常量的引用(reference to const)的一般用途(转载)

如果是对一个常量进行引用,则编译器首先建立一个临时变量,然后将该常量的值置入临时变量中,对该引用的操作就是对该临时变量的操作.对C++常量引用可以用其它任何引用来初始化:但不能改变. 关于引用的初始化有两点值得注意: (1)当初始化值是一个左值(可以取得地址)时,没有任何问题: (2)当初始化值不是一个左值时,则只能对一个const T&(常量引用)赋值.而且这个赋值是有一个过程的: 首先将值隐式转换到类型T,然后将这个转换结果存放在一个临时对象里,最后用这个临时对象来初始化这个引用变量. 通过

Delphi 类引用 Class Reference 元类 MetaClass 用法

delphi中类引用的使用实例 类引用类引用(Class Reference)是一种数据类型,有时又称为元类(MetaClass),是类的类型的引用.类引用的定义形式如下: class of type 例如: type SomeClass = class of TObject; var AnyObj: SomeClass; TObject = class end; TClass = class of TObject; 下面的例子说明了类引用的用法: program Project1; {$APP

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

http://docs.huihoo.com/oracle/crm-on-demand/21/local/html/Release21_SimpleChinese/index.htm?toc.htm?aboutrecordduplicateshelp.html 关于重复记录和外部 ID 在导入记录时,可以选择采用以下方法处理重复记录: 不导入重复记录 覆盖现有记录 注意: 在导入“任务”.“预约”和“附注”时无法使用此覆盖选项.将始终为这些记录类型创建新记录. 为重复项创建附加记录(仅限于“联系

查找内存、CPU占用较高的进程脚本

#!/bin/bash ps -e -o 'rsz,pid,' | sort -nrk1 | head -5 > /tmp/np.txt ps -e -o 'pcpu,pid' | sort -nrk1 | head -5 > /tmp/up.txt #查询内存使用情况 echo "======================================================================================================