当我为包含像
这样的行的新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)”。
答案 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/'