.h 文件中定义的程序集 .macro 定义,我应该如何为此添加 ctags 正则表达式?

assembly .macro defined defined in .h file, how should I add ctags regex for that?

我已经为 exuberant ctags 程序添加了 asm (.S) 文件的正则表达式。
添加的快递是这样的

--regex-Asm=/^ENTRY\(([a-zA-Z_0-9]+)\)$//m,macro/
--regex-Asm=/\.macro[\t ]+([a-zA-Z_0-9]+)//m,macro/

使用它,我可以找到像 .macro addruart, rp, rv, tmp.
这样的行的标签 (参见

今天发现.h文件里定义了一个宏,tag文件里没有。
所以我在 C 语言的 ~/.ctags 中为 .macro ... 添加了相同的行,希望它只会在 .h 文件中看到汇编宏。

--regex-C=/\.macro[\t ]+([a-zA-Z_0-9]+)//m,macro/

.h文件中的定义是这样的:

/*
 * Branch according to exception level
 */
.macro  switch_el, xreg, el3_label, el2_label, el1_label
    mrs \xreg, CurrentEL
    cmp \xreg, 0xc
    b.eq    \el3_label
    cmp \xreg, 0x8
    b.eq    \el2_label
    cmp \xreg, 0x4
    b.eq    \el1_label
.endm

不过好像不行。我该怎么做?

默认情况下,“.h”与 C++ 解析器关联,而不是 C 解析器。

因此,命令行应该是:

--regex-C++=/\.macro[\t ]+([a-zA-Z_0-9]+)//m,macro/

这种关联称为映射。 --list-maps 选项用于显示映射。

$ ctags --list-maps | grep '\.h\>'
C++      *.c++ *.cc *.cp *.cpp *.cxx *.h *.h++ *.hh *.hp *.hpp *.hxx *.inl *.C *.H *.CPP *.CXX
ObjectiveC *.mm *.m *.h