1. 程式人生 > >notepad++ 查詢引用(Find Reference)(適用於c c++及各類指令碼比如lua、python等)

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/