【问题标题】:vim clang_complete strange completing bugvim clang_complete 奇怪的完成错误
【发布时间】:2018-12-08 02:03:17
【问题描述】:

考虑一下这个简单的代码:

#include <vector>
#include <string>

using namespace std;
vector<string> vec1;
//vec1.  //completion does not work AND break the completion that used to work if left without semicolon.

int main(){

    vector<string> vec2;
    vec2.push_back("sometext"); //completion works
    vec1.push_back("sometext"); //works here too

    return 0;
}

当我输入“vec2”时。或“vec1”。在我键入点后,我会立即看到字符串类型的所有方法的下拉列表。所以它在这里工作。

这就是它变得奇怪的原因:

1) 当我执行“vec1”时。在 main 之前的全局范围内,我在下拉菜单中看到了错误的选项(命名空间、使用、asm、typedef、using、static_assert、extern 等)。而且它根本找不到'push_back'(“找不到用户定义的完成(^U^P^N)模式)

2) 现在,如果我未完成此行并忘记输入分号,那么我将无法像以前那样在 main() 中正确地自动完成!

我运行的插件只有 clang_complete 和 supertab。我尝试不使用 supertab 并使用各种 _vimrc 和 .clang_complete 设置,但没有任何好处。我在win7上,llvm/libclang来自官方网站。 出现这样的bug正常吗?

【问题讨论】:

  • 问问插件的问题跟踪器怎么样?

标签: vim clang-complete


【解决方案1】:

该插件完全依赖 libclang 来完成补全,而后者只补全或多或少有效的代码(我认为它可以原谅解析器能够从中恢复的光标之前的一些错误,而光标之后的代码可以包含更严重的错误)。

全局范围的语句不在 C++ 的有效语法结构中。这可能会混淆 clang 的解析,使其返回一些与当前上下文无关的通用完成列表。

我认为任何使用 clang 的补全系统都会出现这种行为,除非它以某种方式明确解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 2012-03-29
    • 1970-01-01
    • 2012-05-02
    • 2013-02-12
    • 2016-09-06
    • 1970-01-01
    相关资源
    最近更新 更多