Vim 的 Clang Complete

Posted

技术标签:

【中文标题】Vim 的 Clang Complete【英文标题】:Clang Complete for Vim 【发布时间】:2011-08-04 04:51:53 【问题描述】:

我将clang_complete.vim 复制到插件,但是当我在某个变量后键入. 时,它说:

找不到模式

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

【问题讨论】:

相关:***.com/q/1115876/1968 从什么时候开始对编辑提出的问题被视为题外话了? 【参考方案1】:

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

let g:clang_user_options='|| exit 0'

【讨论】:

【参考方案2】:

尝试打开一个示例文件

vim /tmp/sample.cpp

然后输入一些cpp代码

#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 repo 中)。

【讨论】:

【参考方案3】:

以下内容让我在 Cygwin 上使用 clang version 3.0 (tags/RELEASE_30/final) 以及在 Windows 上使用 the Clang build instructions 和昨天从主干(通常是稳定的,正如我读过的)签出的版本(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,但无论如何它都可以工作。

【讨论】:

【参考方案4】:

您是否尝试通过在命令行上显式调用 Clang 在 Vim 之外编译代码?

我的代码也有同样的问题,但由于使用了 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。有人找到解决方案了吗?

【讨论】:

【参考方案5】:

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

$ vim ~/.vimrc

然后输入:

let g:clang_complete_copen = 1

【讨论】:

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

以上是关于Vim 的 Clang Complete的主要内容,如果未能解决你的问题,请参考以下文章

使用 ninja 和 clang++ 时 vim 中的快速修复列表

Vim or Emacs,Gcc or Clang,Hacker or Geeker?

C++学习(三四八)CLang GCC

vim YouCompleteMe 遇到的问题及解决

使用Vim编译和运行C ++程序[重复]

在 vim 中安装 YouCompleteMe 时遇到 python 的困难