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 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後竟然能用!於是想了一下將整個工程文件下的.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等)