使用带有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:

是否有任何方法可以指定fruitfruit_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/

10-11 22:55
查看更多