我正在使用 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"))