2014-01-22 27 views
3

當我寫一個新的Emacs包含像你在標準etags中放入了什麼--regex = .. calls?

(fset 'foo (if safe-mode 'fast-over-open-gently 'fast-over-open-everything-and-not-care))) 

後來指數代碼符合etags foo-mode.el「富模式」一些elisp的代碼,的ETag不會索引定義爲FOO。這很煩人,因爲(fset ...真的用於在這裏定義一個函數,也是一個交互函數。

etags的手冊頁表明我可以用一些正則表達式參數解決我的問題。最後,我設法與

etags --regex='{lisp}/(fset.*/' foo-mode.el 

我現在正在考慮開發和維護的正則表達式,擴展ETag的我自己的用戶相關名單:正確的參數語法和秩序絆倒。 可以啓動並改進上述正則表達式,以便匹配較少的(fset ..行。

我現在的問題:你通常需要其他什麼模式才能使用etags來索引lisp和elisp代碼?分享好主意!在網絡上找到的大多數例子中的ETag手冊頁和它們不包括一個口齒不清例如:-(

PS:這臺機器上etags --version說「的ETag(GNU Emacs的22.1)」

+1

一個相關的問題(還沒有回答): http://stackoverflow.com/questions/25290531/default-regular-expression-for-etags – ragerdl

回答

3

我發現在一些例子: https://stuff.mit.edu/afs/athena/astaff/source/src-9.0/third/librep/Makefile.in

下面是我使用的:

--regex='/[ \t]+([ \t]*defun[ \t]+(?[ \t]*\([^ \t)]+\)/\1/'   
    --regex='/[ \t]+([ \t]*define[ \t]+(?[ \t]*\([^ \t)]+\)/\1/'  
    --regex='/[ \t]+([ \t]*defmacro[ \t]+(?[ \t]*\([^ \t)]+\)/\1/'  
    --regex='/[ \t]+([ \t]*defconst[ \t]+(?[ \t]*\([^ \t)]+\)/\1/'  
    --regex='/[ \t]+([ \t]*defvar[ \t]+(?[ \t]*\([^ \t)]+\)/\1/' 

或者,這只是抓住「高清」是非常有用的:

--regex='/[ \t]+([ \t]*def[ \t]+(?[ \t]*\([^ \t)]+\)/\1/' 
相關問題