现象:

我在CentOS安装的YouCompleteMe并不会补全 C++语法


开始演练!

=============================================================

恢复默认的ycm配置:

查找配置文件
[chunli@CentOS ~]$ find  ~/.vim/bundle/YouCompleteMe/ -name '.ycm_extra_conf.py'  
/home/chunli/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py
/home/chunli/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py
/home/chunli/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/tests/clang/testdata/general_fallback/.ycm_extra_conf.py
/home/chunli/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/tests/clang/testdata/noflags/.ycm_extra_conf.py
/home/chunli/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/tests/clang/testdata/test-include/.ycm_extra_conf.py
/home/chunli/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/tests/clang/testdata/client_data/.ycm_extra_conf.py
/home/chunli/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/tests/clang/testdata/.ycm_extra_conf.py
/home/chunli/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/tests/cs/testdata/testy-multiple-solutions/solution-not-named-like-folder/extra-conf-abs/.ycm_extra_conf.py
/home/chunli/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/tests/cs/testdata/testy-multiple-solutions/solution-not-named-like-folder/extra-conf-rel/.ycm_extra_conf.py
/home/chunli/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/tests/cs/testdata/testy-multiple-solutions/solution-not-named-like-folder/extra-conf-bad/testy/.ycm_extra_conf.py
/home/chunli/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/tests/testdata/client/.ycm_extra_conf.py
/home/chunli/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/tests/testdata/extra_conf/project/.ycm_extra_conf.py

复制到当前ycm配置文件路径
[chunli@CentOS ~]$ cp /home/chunli/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py ~/.vim/



这是一个简单的C++ 程序, 编译无警告可运行

[chunli@CentOS ~]$ cat main.cpp 
#include 
#include 
int main()
{
    std::vector        v1;
    std::map    m1;  
    return 0
}
[chunli@CentOS ~]$ g++ main.cpp -Wall && ./a.out #编译并运行,没有任何错误




我的G++版本

[chunli@CentOS ~]$ g++ --version    #我的G++版本
g++ (GCC) 6.3.0
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.



那么问题开始了

[chunli@CentOS ~]$ cat main.cpp 
#include 
#include 
#include 
int main()
{
    std::vector             v1; v1.
    std::map    m1;  
    return 0;
}
[chunli@CentOS ~]$ 
当我键入v1.时没有任何提示...........

在vim中键入:YcmDiags 看看问题


问题1:找不到 'string' 文件

Linux平台 YouCompleteMe自动补全C++程序_第1张图片



解决问题1:要找到 'string' 文件

[chunli@CentOS ~]$ sudo find / -name 'string'   #查找这个文件
/usr/include/c++/4.4.4/string
/usr/include/c++/4.4.4/debug/string
/usr/local/include/c++/6.3.0/string
/usr/local/include/c++/6.3.0/experimental/string
/usr/local/include/c++/6.3.0/debug/string
/home/chunli/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/BoostParts/boost/algorithm/string
/home/chunli/ycm_CentOS/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/BoostParts/boost/algorithm/string
[chunli@CentOS ~]$ 

将系统路径写入配置
[chunli@CentOS ~]$ vim ~/.vim/.ycm_extra_conf.py
在flags中尾端追加2行
'-isystem',
'/usr/local/include/c++/6.3.0/',



重新vim 打开CPP文件

还是不会自动补全

在vim中键入:YcmDiags 看看问题

报错2: 找不到 'bits/c++config.h'

Linux平台 YouCompleteMe自动补全C++程序_第2张图片


解决问题2:要找到 'bits/c++config.h' 文件

[chunli@CentOS ~]$ sudo find / -name 'c++config.h'
/usr/include/c++/4.4.4/i686-redhat-linux/bits/c++config.h
/usr/local/include/c++/6.3.0/i686-pc-linux-gnu/bits/c++config.h
[chunli@CentOS ~]$ 
将系统路径写入配置
[chunli@CentOS ~]$ vim ~/.vim/.ycm_extra_conf.py
在flags中尾端追加2行
'-isystem',
'/usr/local/include/c++/6.3.0/i686-pc-linux-gnu/'



重新vim 打开CPP文件

现在OK了, 可以补全STL了

Linux平台 YouCompleteMe自动补全C++程序_第3张图片

Linux平台 YouCompleteMe自动补全C++程序_第4张图片


头文件自动补全:

Linux平台 YouCompleteMe自动补全C++程序_第5张图片