在Vim中如何知道函数是否已定义

时间:2016-02-25 09:11:31

标签: vim

我正在使用Vim编辑器v7.4。 我有一个巨大的C代码库,我不断对它进行更改 是否有一种方法(在编译之前)知道是否为此文件定义了我正在添加到某个文件的函数。

由于

3 个答案:

答案 0 :(得分:0)

我不确定是否正确理解您的需求。在我的定义中,当我向文件添加一个函数时,我添加了它的定义,因此它被定义了。但是当我在文件中使用函数时,我只需要它的声明。然后还有一个问题就是确保在某个地方声明了翻译单元中定义的函数(与静态函数或头文件在同一个TU中私有)。

对于后者,我有一个解决方案(检查函数定义和声明在lh-cpp中是否平衡)。对于确保在UT中使用它来声明函数的情况,它不会那么简单:我们需要执行预处理器工作(并递归地跟随包含)并搜索是否确实声明了函数。这并非不可能,但最好让vim知道头文件的路径以便查找它们。

答案 1 :(得分:0)

查看 exuberant ctags 等工具。它解析C风格的文件以查找任何标识符并将它们存储在标记文件中,以便在Vim中快速访问它们中的每一个。

安装完成后,在shell命令行中,您必须使用以下命令创建标记文件:

$ ctags *.c *.h

这将创建一个名为tags的新文件,其中解析当前目录中的所有c文件和头文件。请注意,这个工具有很多选项(比如递归地包含所有lib头文件,这可能导致一个巨大的文件),你可以查看文档了解更多细节。

完成后,在Vim中,有几个命令可以透明地使用此文件中的信息。首先检查当前目录是否与标记文件相同;然后,要检查标记文件中是否已存在标识符(如函数名称),可以使用:

:ts myFunctionName

答案 2 :(得分:0)

我认为标签不足以检查功能是否已定义。 C语法的灵活性使其变得更糟,因为大多数标记工具都是基于语法的,而不是基于语义的。

例如,目前,vim最强大的代码完成插件是
YouCompleteMe,由于Clang而基于语义。

恕我直言,你的问题的答案是:编译它!

为了编译更多便利,您可以在.vimrc中添加以下配置。 map <F6> :make install<CR>

在此之后,当您按F6时,将启动编译器以检查您的代码。