如何跳转到C/C++函数声明而不是其定义?

8

我知道在Vim中可以使用CTRL+]跳转到不同语言的函数定义处。那么如何跳转到C/C++头文件中的声明呢?

由于我有很多包含有意义注释/说明的头文件,在大型代码库中找到函数声明会是一个频繁的任务。是否有某些快捷键来完成此操作?


3
实际上,这不是“vim”的一个功能,而是“ctags”。 - 0xF1
ctags 中没有这样的支持。但是在 vim 中有类似的功能 cscope 和 grep 插件支持。 - Mohit Jain
3个回答

10

ctags默认不会添加函数原型。您需要添加选项

--c++-kinds=+p

来支持函数原型。 我的ctags命令看起来像这样:

ctags --c++-kinds=+p --fields=+iaS --extra=+q *.h *.c

当您在标记处时,可以使用以下编辑器命令浏览标记(表示相同的标记作为定义/声明多次出现)-

tn(下一标记)

tp(上一标记)


当我使用CTRL+]时,它仍然会跳转到函数定义。 - Keisau CHING
按下2CTRL+]即可完成。您的标签文件现在包含函数声明和定义。 CTRL+]跳转到标签文件中第一个匹配项。要进入第二个,请按2CTRL + ],以此类推。我不太确定ctags是如何对它们进行排序的,先声明后定义还是相反(也许排序顺序与ctags先找到的内容有关)。 - Habi
实际上,您的命令根本不起作用。它会给出以下警告:'''ctags: 警告:无法打开源文件“*.h”:没有那个文件或目录 ctags: 警告:无法打开源文件“*.c”:没有那个文件或目录'''. 我尝试了ctags --fields=+iaS --extra=+q -R 并在特定函数上工作。现在2CTRL+]转到另一个定义(由宏包围的静态内联函数与相同名称的头文件),而使用3CTRL-],我最终到达我的声明。 - Keisau CHING

2
基于Bram的7个习惯,不需要任何插件,你可以做到:
1)设置您标题的路径(这对下面的步骤2非常重要)
:set path+=/path/to/headers

2) 然后执行以下命令之一:

[I 显示光标下关键字在头文件中的所有列表,或者

[<Tab> 跳转到该位置,您可以使用 Ctrl+6 返回到您的文件。


1

我很满意cscope,它包括数据库中的头文件。

只需将cscope_maps.vim放入~/.vim/plugin/中,然后按CTRL-],如果已经建立了cscope数据库,将列出所有选项。

要建立cscope数据库,只需键入

cscope -bR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接