【发布时间】:2021-10-12 11:08:47
【问题描述】:
我已经开始使用 VSCode 了。我正在用 C 编写代码,所以我安装了推荐的 C/C++ 插件,这些插件提供了 de Intellisense 完成功能。我还添加了 VIM 扩展和其他一些小东西。 我注意到 Intellisense 建议很好地推荐宏、函数名称、字段等……但它们从不建议将简单的词作为变量或参数,这些词确实在我正在编写的代码的密切上下文中。
本机 VSCode 自动完成功能可以做到这一点。 我已经尝试了几件事:
- 启用该功能: "editor.wordBasedSuggestionsMode": "currentDocument", 但是效果什么都没有,即使 Intellisense 结果无效,我也没有得到任何基于单词的建议。我认为当 tje Intellisense 找不到任何匹配项时,此功能将查询基于原生单词的建议。
- 禁用 Intellisense 建议:
CA根据 cmets 的设置,这应该使编辑器使用基于单词的 VSCOde 补全。但是使用此设置,我永远不会收到任何自动完成建议。
- 完全禁用 C/C++ 扩展。在这种情况下,我终于获得了一个基于单词的原生 VSCode 建议,但当然我也失去了其他插件的优势,如大纲、符号搜索、语法帮助等......
我想知道:
- 这是代码完成的预期 Intellisense 行为还是错误?
- 除了符号和宏之外,还有什么方法可以让 Intellisense 建议上下文词?
- 是否有任何方法可以仅禁用扩展的自动完成功能并使“本机”VSCOcode 代码完成工作?我希望通过“C_Cpp.autocomplete”获得这样的行为:“禁用”,但由于我没有看到这样的结果,我想知道这是否是扩展的错误。
事实上,现在我注意到这种行为有点令人困惑。在上面的示例中,我从头开始编写了 functionA,在这种情况下,我确实对局部变量和参数变量提出了建议。但是对于已经存在的项目函数(ApplyGainControl)请注意,我正在尝试使用 gain_word_current 参数并且我没有得到任何建议。当我尝试局部变量时也是如此。当我输入 gain 时,我确实得到了一些建议,但建议与关闭上下文不同。
所以现在我想知道当我打开现有文件夹项目或在 VSCode 中编写新内容时,建议是否有任何不同。我不知道构建建议数据库的潜在行为。
【问题讨论】:
-
你试过Editor > Suggest: Locality Bonus吗?或者你根本没有得到任何建议(基本上是一个空列表)?
-
我无法重现您的问题。只要我输入
g,建议窗口就会弹出,列表中的第一个条目是:gain_word_current。我想,这是因为您没有#include <stdint.h>指令。如您的图像示例所示,stdint.h中的符号表示错误。添加包含并重试。 -
事实上,我忘了测试它,如果我删除包含指令,我将不再得到想要的建议。
-
好的,当我添加包含指令时,至少参数中的红色错误行消失了,但仍然没有建议,可能是因为我在项目的文件系统中没有这样的文件。确实感谢您的评论,我注意到在我们不使用 stdint 数据类型的其他现有项目中自动完成其他功能时,我没有同样的问题。这是一个巨大的线索,谢谢。无论如何,我认为这是我猜的建议插件的弱行为
-
<stdint.h>是标准标题,请参阅:C Standard Library header files,因此您应该将它放在附近的某个地方。也许,您的包含路径设置搞砸了?如果您使用stdint.h中的符号编译源文件,是否会收到警告?
标签: c visual-studio-code intellisense