【问题标题】:ctags/vim - Trouble handling expressions with brackets in identifier listctags/vim - 处理标识符列表中带括号的表达式时遇到问题
【发布时间】:2013-12-21 08:13:12
【问题描述】:

我使用 vim 和 ctags (exuberant 5.7) 来导航我的源代码。然而,一些函数和变量添加了一些英特尔 C 扩展关键字,即:

__declspec(target(mic)) double calculate_gamma(int m, int n) { ... }

问题在于,由于 __declspec,ctags 忽略了对其进行索引,因此函数 calculate_gamma 不会被标记。

使用标识符列表选项 -I 可以使用 ctags 解决此类问题。但是,如果您的表达式中有括号,则此选项会讨厌您:

$ ctags *.c *.h -I __declspec(target(mic))
-bash: syntax error near unexpected token `('

我尝试在 __declspec 周围加上引号、转义字符 '\' 和 ansi-C 引用 $'',这些都阻止了 bash 抱怨,但是 ctags 仍然没有标记函数 calculate_gamma。如果没有括号,这将起作用。

我做错了什么还是有其他方法可以从 ctags 中获取我想要的内容?干杯。

【问题讨论】:

  • 手册页说您可以附加+ 使其忽略括号,但它对我不起作用...ctags *.[ch] -I __declspec+
  • 您可以尝试将异常放入文件中,然后将文件名提供给 -I 选项,例如:-I ./my_exceptions.txt .. 虽然我可以没有 ctags (exuberant ctags 5.8) 将函数名设置为 calculate_gamma .. 该函数在生成的标签文件中始终命名为 target。但生成的正则表达式是正确的。

标签: regex bash vim exuberant-ctags


【解决方案1】:

我想你想要:

ctags -I __declspec+ *.c *.h

-I __declspec 实质上是告诉 ctags 忽略 __declspec,就好像它是一个宏一样,+ 后缀意味着也忽略 __declspec 后面的括号内的参数。

【讨论】: