1

我正在使用 exuberant ctags 生成一个标签文件(emacs 格式),我传递了这个附加标志:

--regex-PHP=/do\_action\(\ '([a-zA-Z0-9\_]+)'/\1/a,actions/

它成功地捕获了我想要的东西,问题是我想使用 emacs lisp 以列表的形式返回所有标记为“a”的标签——或者我什至会满足于匹配 do_action 的正则表达式。

不幸的是,似乎 etags.el 中的所有内容都面向交互式使用,find-tag-in-order这是我能想到的唯一非交互式方式,但无论是否匹配,我的代码都会返回错误消息:

(find-tag-in-order
 "test_string"
 find-tag-regexp-search-function
 find-tag-regexp-tag-order
 find-tag-regexp-next-line-after-failure-p
 "matching"
 t)

在执行交互式 Mx find-tag test_string 时,会将我带到文件和定义它的位置。

理想的用法是: (tags-of-type "a")(tags-matching "do_action")。虽然我知道标签的名称是在我的正则表达式的括号组中匹配的。

有任何想法吗?

更新: 虽然这不能解决以 emacs lisp 列表的形式获取标签的问题,但我意识到使用该--PHP-kinds参数可以为每种类型维护多个标签文件。

在这种方法中,方法(虽然不工作)将是这样的:

(let ((tags-table-list '("tag-file-1")))
  (tags-search "specific-to-tag-file-1"))
4

1 回答 1

2

我想,你想要的是(tags-completion-table). 它返回一个符号数组,这些符号是当前 TAGS 表中的条目。

无论如何,根据你所追求的,我认为函数tags-completion-table及其同名的缓存变量是开始的地方。两者都在 library 中定义etags.el

(如果您需要字符串列表而不是符号数组,只需使用mapatomsand symbol-name。)

于 2014-03-25T22:35:06.080 回答