ctags 可以区分同名的不同符号吗?

Olp*_*pah 5 c vim ctags cscope

我正在尝试将 vim 与 ctags 和/或 cscope 一起使用,它工作得很好,但我遇到了一些问题,其中 ctags 跳转到错误的符号。例如,在下面的代码中,如果我将光标放在 main() 中的符号“a”上并按Ctrl+]转到定义,我将被定向到“虚拟结构”中的“char a”,但我想定向到我的 main 中的“int a”。ctags 或 cscope 可以处理这个问题吗?或者符号是否需要唯一的名称?

struct dummy
{
   char a;
};

int main ()
{
   int a = 1;
   a = a + 2;
   return a;
}
Run Code Online (Sandbox Code Playgroud)

Ing*_*kat 5

是的,ctags 通过将所有替代项放入标签文件来处理此问题;您可以打开该tags文件来验证这一点。

您的问题是由命令的行为引起的<C-]>;从:help CTRL-]

当{ident}有多个匹配标签时,跳转到第[count]个。如果没有给出 [count],则跳转到第一个。请参阅|标签匹配列表| 用于跳转到其他匹配的标签。

您可以[count]在命令之前提供 a (通过 错误标签跳转后首先跳转回原始位置<C-t>),或者使用该:tselect命令来代替,该命令列出所有标签替代项并查询要跳转到哪个标签。

  • 注意:除了 `:tselect` 之外,也可以使用 `g&lt;C-]&gt;`。 (3认同)