ctags -f c -h ".h" -R --c-kinds=+p --fields=+iaS --extra=+q /usr/include
这是在
~/.vim/ctags/
目录中运行的,我将所有为系统级头文件生成的ctags放在该目录下(我还有一些用于ROS和CPP的内容,但这与此无关)。无论如何。我的.vimrc中正确设置了ctags文件,而且vim肯定可以看到ctags,但由于某种原因,自动完成弹出窗口只会显示来自已包含的头文件的结果,如果我写出整个符号然后开始删除,则可以显示结果。例如,如果我在项目中
#include <string.h>
,然后想调用strlen()
,并在活动vim缓冲区中开始键入str
,我只会得到当前vim缓冲区中的符号结果。但是,如果我键入strlen
然后开始删除一个或两个字符并按<C-n>
,则弹出菜单将填充来自任何其他包含的头文件的匹配项。
编辑:事实证明,如果我只是按下“s”,然后再按<C-n>
,它也可以工作。所以问题似乎是只有在手动启动弹出菜单时才能工作。这让我认为它是一个插件问题(见下文)。
附加信息:
completeopt
被设置为completeopt=menuone,menu,preview,longest
我安装了OmniCppComplete,我认为它可能会影响行为。它目前没有仅在C++文件中被有条件地加载。如果您想让我编辑并发布我的.vimrc中的OmniCppComplete设置,请告诉我。
我还安装了AutoComplPop,但我还没有做任何配置,所以它正在使用其默认设置运行。我还没有真正研究这个插件,所以不知道它的一些行为是否会干扰结果。
<C-x><C-u>
,不管它做什么。在C文件中使用<C-x><C-o>
会返回一个未找到模式的错误,因此现在我只是禁用AutoComplPop并使用<C-n>
来获得最小特定结果。我需要进行更多的研究和实验。感谢您指引我正确的方向! - Doug Stephen<C-x><C-u>
调用了一个自定义函数,但你没有这个函数,因此出现了错误。我也使用 ACP。它也不支持 JavaScript,所以我进行了修改。实际上,即使对于当时的新手来说,这也很容易。请参见此处和同一位置的其他地方。 - romainl<C-x><C-o>
时遇到了错误,我猜测这意味着我的vim运行时中不存在一个能够响应C文件中给定模式的函数。我会尝试根据配置调整AutoComplPop,看看能否解决问题。这看起来很简单。我唯一的问题是,你是如何创建acp#meetsForJavaScriptOmni
的?其他的我都明白了。 - Doug Stephen#include
文件被注册为关键字,因此ACP在前进时调用了关键字完成,因此结果范围较小,但由于正则表达式作用域的缘故,当我在退格时调用了omnifunc。我通过设置全局变量来将关键字触发器更改为使用omnifunc而不是ACP的函数,当加载C文件时。 - Doug Stephen