VSCode Intelligence C扩展没有提示有用的词

VSCode Intelligence C extension does not suggest useful words

我已经开始使用 VSCode 了。我在 C 中编码,所以我安装了推荐的 C/C++ 插件,它提供了 de Intellisense 完成功能。我还添加了 VIM 扩展和一些其他小东西。 我注意到 Intellisense 建议很好地推荐宏、函数名称、字段等...但它们从不建议简单的单词作为变量或参数,这些单词确实在我正在编写的代码的密切上下文中。

本机 VSCode 自动完成功能可以做到这一点。 我尝试了几种方法:

  1. 启用功能: "editor.wordBasedSuggestionsMode": "currentDocument", 但是效果没什么,即使 Intellisense 结果无效,我也没有得到任何基于单词的建议。我认为当 Intellisense 找不到任何匹配项时,此功能将查询基于本地单词的建议。
  2. 禁用 Intellisense 建议:

C根据设置注释,这应该使编辑器使用 VSCOde 基于单词的完成。但是使用此设置我从来没有得到任何自动完成建议。

  1. 完全禁用 C/C++ 扩展。在这种情况下,我最终有效地获得了基于 wordbased 的本地 VSCode 建议,但当然我也失去了其他插件优势,如大纲、符号搜索、语法帮助等...

我想知道:

  1. 这是代码完成的预期 Intellisense 行为还是错误?
  2. 除了符号和宏之外,是否有任何方法可以使智能感知建议上下文词?
  3. 有没有办法只禁用扩展的自动完成功能并使 'native' VSCOde 代码完成工作?我希望通过“C_Cpp.autocomplete”得到这样的行为:“禁用”,但由于我没有看到这样的结果,我想知道这是否是扩展的错误。

用一些图片更新了评论:

事实上,现在我注意到这种行为有点令人困惑。在上面的示例中,我从头开始编写 functionA,在这种情况下,我确实对局部变量和参数变量有建议。但是对于已经存在的项目函数 (ApplyGainControl) 请注意,我正在尝试输入 gain_word_current 参数,但我没有得到任何建议。当我尝试局部变量时也是如此。我在输入 gain 时确实得到了一些,但建议与关闭上下文不同。

所以现在我想知道当我打开一个现有的文件夹项目或当我在 VSCode 中写入新内容时,这些建议是否有任何不同。我不知道建立建议数据库的底层行为。

您有两种选择来控制建议:

正如我在评论中提到的,我不知道你是否完全没有得到任何建议。但如果您对这些建议不满意,链接中描述的选项可能会有所帮助。

一些实验:

标记后的评论显示建议的第一个条目 window。

#include <stdint.h>

void foo(int i, int in, int *intp, int *int8p, int interrupt)
{
    i    //int i
    in   //int in
    int  //int (followed by the standard fixed sized integers)
    intp //int *intp
    int8 //int8_t, the second entry: int *int8p
    inte //int interrupt
}

注意editor.suggest.localityBonus被激活,editor.suggestSelection是默认值,似乎是 recentlyUsed.