使用带有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标签文件并自己处理结果,但对于一个非常大的文件,这将是昂贵的,我希望有一个内置的方式来获得这样的基本信息。
最佳答案
是的,您可以通过过滤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
)属性。关于c - 从ctags文件中提取枚举值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17255517/