我正在使用旺盛的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)
在进行交互式M-x查找标记时,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"))
答案 0 :(得分:2)
我想,你想要的是(tags-completion-table)
。它返回一个符号的obarray,这些符号是当前TAGS表中的条目。
在任何情况下,根据你所追求的是什么,我认为函数tags-completion-table
及其同名的缓存变量是开始的地方。两者都在库etags.el
中定义。
(如果您需要字符串列表而不是符号的obarray,请使用mapatoms
和symbol-name
。)