是否可以使用带有Vim的ctags来提取给定枚举的所有枚举值?
例如,如果我有以下枚举类型:
typedef enum fruit {
APPLE,
ORANGE,
PEAR,
} fruit_t;
在我的代码文件中生成以下行(使用默认--c-kinds
):
APPLE minex.c /^ APPLE,$/;" e enum:fruit file:
ORANGE minex.c /^ ORANGE,$/;" e enum:fruit file:
PEAR minex.c /^ PEAR,$/;" e enum:fruit file:
fruit minex.c /^typedef enum fruit$/;" g file:
fruit_t minex.c /^ } fruit_t;$/;" t typeref:enum:fruit file:
有没有办法指定fruit
或fruit_t
并获取值[ 'APPLE', 'ORANGE', 'PEAR' ]
?
在Vim中我曾希望:tselect fruit
可以做到这一点,但事实并非如此。
当然我可以grep标签文件并自己处理结果,但对于一个非常大的文件,这将是昂贵的,我希望有一种内置的方式来获取这些基本信息。
答案 0 :(得分:3)
是的,您可以通过过滤taglist()
函数的结果,这样可以方便地以编程方式访问标记数据库。
:echo map(filter(taglist('.*'), 'has_key(v:val, "enum") && v:val.enum ==# "fruit"'), 'v:val.name')
['APPLE', 'ORANGE', 'PEAR']
这是做什么的:
.*
正则表达式)filter()
)所有包含(has_key()
)enum
属性且其名称正好(==#
)fruit
的标记。map()
属性(name
)。