您在标准etags --regex = ..中调用了什么?

时间:2014-01-22 13:00:52

标签: emacs tags elisp

当我为包含像

这样的行的新Emacs“foo-mode”编写一些elisp代码
(fset 'foo (if safe-mode 'fast-over-open-gently 'fast-over-open-everything-and-not-care)))

以后使用etags foo-mode.el索引代码, etags 不会为 foo 的定义编制索引。这很烦人,因为(fset ...实际上是用来定义一个函数,也是一个交互式函数。

etags的手册页表明我可以通过一些正则表达式参数来解决我的问题。最终,我设法通过

偶然发现了正确的参数语法和顺序
etags --regex='{lisp}/(fset.*/' foo-mode.el

我现在正在考虑开发和维护我自己的依赖于用户的etags正则表达式扩展列表。 可以启动并改进上述正则表达式,使其匹配较少的(fset ..行。

我现在的问题:您通常希望etags为lisp和elisp代码编制索引的其他模式是什么?分享好主意!网上发现的大多数示例都在etags手册页中,并且它们不包含一个lisp示例: - (

PS:在这台机器上etags --version说“etags(GNU Emacs 22.1)”。

1 个答案:

答案 0 :(得分:4)

我在以下网站找到了一些例子: 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/'

或者,只捕获“def”的东西非常有用:

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