首先感谢简书大佬,由于这位大佬已经说的相当清楚了,只是他的clang是二进制包,我的系统找不到只能源码动手.
1先就是安装llvm-clang这个按照官方教程来就好,注意这里在分为两种安装方式,
一是直接二进制包,二是源码编译.(照着官方的来肯定没错)
2.确保Vim版本足够,并且支持python2/3,有的人说只能选一个我没有尝试.
vim --version | grep python
//查询vim版本,下面是我的结果
+comments +libcall -python +visualextra
+conceal +linebreak +python3 +viminfo
3.给你的VIm装上插件管理器,可以用Vundle和Plug;
这里本人范了个错误,使用的是Plug但生成ycm_core.so的时候使用的是bundle的目录下面的文件所以一直提示you need to compile YCM before using it. Read the docs!.
4.使用3中的二选一安装YCM.(这个教程一大堆,不重要);
5.用来建立外部生成.so文件的外部编译环境(需要cmake和makefile).
cd ~
mkdir ycm_build
cd ycm_build
cmake -G "" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
//""具体取值自己看命令提示
//~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
//这个官方给出的是vundle安装的目录,我的是
//~/.vim/plugged/YouCompleteMe/third_party/ycmd/cpp
但是如果就是这样子的话你会被semantic的反馈信息烦死,打开vim到处都是红字找不到映射.所以官方建议生成对应的ycm_code.so文件,可以组织这样的情况发生.
cmake -G "" -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
Note:-DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir这个参数只针对二进制包安装Clang的用户,后面的参数指向解压出来的二进制包文件夹.
由于我是源码编译的所以我使用的参数是-DUSE_SYSTEM_LIBCLANG=ON.
如果想用自定义的libclang:(这个了解的自己去试).
cmake -G "Unix Makefiles" -DEXTERNAL_LIBCLANG_PATH=/path/to/libclang.so . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
最后上面三种方式是为了生成编译ycm_core.so的Makefile文件和配置最后执行如下
cmake --build . --target _regex --config Release
6.最后在使用前还需要运行
./install.py --clang-completer
但是本人对python缺乏认识,所以报了毛病,于是使用的install.sh安装的.
Searching Python 3.7 libraries...
ERROR: found static Python library (/usr/local/python/lib/python3.7/config-3.7m-x86_64-linux-gnu/libpython3.7m.a) but a dynamic one is required. You must use a Python compiled with the --enable-shared flag. If using pyenv, you need to run the command:
export PYTHON_CONFIGURE_OPTS="--enable-shared"
before installing a Python version.
尝试过重新编译但是反而搞出了更大的毛病.
最后修改2个配置文件~/.vimrc,和.ycm_extra_conf.py,这两个解释已经很多了,建议针对不同的语言和项目特化.
.ycm_extra_conf.py是从你的pwd目录向上递归差找的,也可以通过.vimrc中设置ycm_global_ycm_conf条件设置.
echo | clang -v -E -x c++ -
查到的参数通过'-isystem'依次添加到.ycm_extra_conf.py文件中的flag内.