Emacs 你在你的标准ETag里放了什么--regex=。。电话?
当我为一个新的Emacs“foo模式”编写一些elisp代码时,它包含一行Emacs 你在你的标准ETag里放了什么--regex=。。电话?,emacs,tags,elisp,Emacs,Tags,Elisp,当我为一个新的Emacs“foo模式”编写一些elisp代码时,它包含一行 (fset 'foo (if safe-mode 'fast-over-open-gently 'fast-over-open-everything-and-not-care))) 然后使用etags foo mode.el对代码进行索引,etags不会对foo的定义进行索引。这很烦人,因为(fset…实际上是用来定义一个函数的,也是一个交互式函数 etag的手册页面建议我可以用一些regex参数来解决我的问题。最终,
(fset 'foo (if safe-mode 'fast-over-open-gently 'fast-over-open-everything-and-not-care)))
然后使用etags foo mode.el对代码进行索引,etags不会对foo的定义进行索引。这很烦人,因为(fset…
实际上是用来定义一个函数的,也是一个交互式函数
etag的手册页面建议我可以用一些regex参数来解决我的问题。最终,我成功地找到了正确的参数语法和顺序
etags --regex='{lisp}/(fset.*/' foo-mode.el
我现在正在考虑为etag开发和维护我自己的依赖于用户的regex扩展列表。
可以启动并改进上述正则表达式,使其与(fset..
行中的较少部分匹配
我现在的问题是:您通常希望etags为lisp和elisp代码索引哪些其他模式?请分享好的想法!在web上找到的大多数示例都在etags手册页中,其中不包括一个lisp示例:-(
PS:在这台机器上,etags--version
上写着“etags(GNU Emacs 22.1)”。我在以下位置找到了一些示例:
以下是我正在使用的:
--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/'
一个相关的问题(也没有答案):这并没有回答您的etags
问题,而是关于:fset
-最好使用defalias
,因为后者处理某些符号属性并用定义的位置更新加载历史记录(我假设它也会被etag
拾取)。