Clang Complete for Vim

18
我把 clang_complete.vim 复制到插件中,但当我在某个变量后面输入 . 时,它显示:

未找到模式

我搜索了这个问题,有人说我应该配置 g:clang_complete_auto:g:clang_complete_copen:。我该怎么做?


1
相关链接:https://dev59.com/33NA5IYBdhLWcg3wC5JR - Konrad Rudolph
8
编辑器相关的问题何时被视为不适合提问的话题? - UncleZeiv
5个回答

26

我遇到了同样的问题,并通过将以下内容添加到我的 .vimrc 文件中来解决它

let g:clang_user_options='|| exit 0'

12

尝试打开一个示例文件

vim /tmp/sample.cpp

输入一些C++代码

#include <iostream>

int main() {
  std:: // <-- this should complete
}
请注意,您实际上需要包含头文件,因为完成是由编译器完成的。如果这个方法有效,但您的项目仍然显示“未找到模式”,那么 clang++ 可能无法编译您的项目。编译代码时是否使用任何 -I 开关?将其添加到名为 .clang_complete 的文件中,该文件位于您的项目目录中。
对于我来说,我的 .vim/plugin 文件夹只包含可以下载的 clang_complete.vim 文件,这对我很好用。
$ find .vim
.vim
.vim/plugin
.vim/plugin/clang_complete.vim

...但在这个问题报告中https://github.com/Rip-Rip/clang_complete/issues/39,建议你可能需要更多的文件(其他文件都在git存储库中)。


4

以下是我在使用 clang version 3.0 (tags/RELEASE_30/final) 的Cygwin上以及在Windows上使用Clang构建说明和昨天从trunk(通常是稳定的,据我所知)签出的版本 (clang version 3.1 (trunk 154056)) 并使用Visual Studio 2010进行构建时,让我的事情顺利运转的内容:

" clang_complete
let g:clang_complete_auto = 0
let g:clang_complete_copen = 1
" :h clang_complete-auto_user_options
if has('win32unix') " Cygwin
       " Using libclang requires a Vim built with +python
       let g:clang_use_library = 1
       " Mit der Option "gcc" kriege ich Fehler.
       " Remove "gcc" option as it causes errors.
       let g:clang_auto_user_options='path, .clang_complete'
elseif has('win32') " Windows
       let g:clang_auto_user_options='path, .clang_complete'
       let g:clang_use_library = 1
       let g:clang_library_path='D:\Sourcen\LLVM\build\bin\Debug'
endif

请注意,Windows版本可能会偶尔出现断言失败,但是它能正常工作,虽然不完全像Cygwin版本那样。猜测这与使用MSVC与GCC头文件有关。
Cygwin版本最初会出现“error: release unlocked lock”错误,但仍然可以正常工作。

1
你尝试过在Vim之外通过显式调用命令行上的Clang编译代码吗?
我的代码也遇到了同样的问题,但是后来发现由于使用了MPI库(mpich2),Clang无法编译我的代码。也许类似的问题导致了Clang在你的情况下失败?在我的情况下,如果我删除MPI依赖项,一切都可以正常工作,例如:
#include <iostream>
#include <string>

int main() {
    std::string myString("test string");
    std::cout << myString.size() << std::endl; // After typing the dot, I get a list of std::string methods
}

顺便说一下,我在我的MPI代码中仍然想念clang_complete。有人找到了解决方案吗?


0

要配置Vim,您必须找到或创建您的.vimrc文件:

$ vim ~/.vimrc

然后输入:

let g:clang_complete_copen = 1

@dalibocai 你能否用一个只有一个文件的小项目进行测试吗?你有其他的插件吗? - etaty
我在std::string上测试了它,但它不起作用。我已经删除了所有的omni自动完成文件。我测试了clang++,它运行良好。 - dalibocai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接