在CentOS 6 & 7编译安装YouCompleteMe for Vim

2017-06-22|Categories: Linux, Vim|

安装步骤

  1. 确认Vim版本不低于7.4.1578,而且支持Python
    • 在Vim中输入:version,查看输出的顶部包含Vi IMproved X.Y的内容,X.Y是主版本号,
      • 如果大于7.4,恭喜你,版本满足要求,查看版本号的步骤到此为止;
      • 如果等于7.4,继续查看Included patches: 1-ZZ是一个数字,必须大于等于1578
      • 如果小于7.4,则必须编译一个最新版的Vim,不必担心,步骤很简单,参见在CentOS 7编译最新版Vim
    • 确认版本号满足要求之后,继续在Vim中输入:echo has('python') || has('python3'),输出结果必须是1,如果是0,则必须编译一个最新版的Vim,参见在CentOS 7编译最新版Vim
  2. 安装依赖包:
    yum install -y automake gcc gcc-c++ kernel-devel cmake
    yum install -y python-devel python3-devel
    
  3. 通过vim-plug安装YouCompleteMe,其它插件管理器也可以,但vim-plug更方便,只需要在.vimrc添加一行:
    Plug 'Valloric/YouCompleteMe', { 'do': './install.py' }
    

    保存、退出、重新打开Vim,输入:PlugInstall,YouCompleteMe会被自动下载、编译安装。

如果通过Vundle安装,则把Plugin 'Valloric/YouCompleteMe'添加到.vimrc,安装的命令则是:PluginInstall,最后进入YouCompleteMe文件夹手动编译:

  cd ~/.vim/bundle/YouCompleteMe
  ./install.py

其它问题请查看YouCompleteMe官方完整安装指南,仔细阅读 每一个 单词!

编译报错的解决方案

安装YouCompleteMe的关键就在于编译ycm_core,官方提供的步骤看似简单,但由于每台电脑的软件、硬件不同,其实在编译时很容易出现各种各样的问题,我遇到的问题如下:

Your C++ compiler does NOT support C++11

详细的报错上下文:

CMake Error at CMakeLists.txt:188 (message):
Your C++ compiler does NOT support C++11.

-- Configuring incomplete, errors occurred!
See also "/tmp/ycm_build_z67MXd/CMakeFiles/CMakeOutput.log".
ERROR: the build failed.

原因很简单:CentOS 7自带的gcc版本太老旧,需要升级。CentOS 7升级gcc方法如下:

yum groupinstall -y "Development tools"

# Install SCL repo
# The OS shipped CentOS-Base.repo must be enabled 
yum install -y centos-release-scl

# Install devtoolset-6 from SCL
yum install -y devtoolset-6

# Activate it
source /opt/rh/devtoolset-6/enable

# List all available GCCs,
# then check the default one's version
which -a gcc
gcc --version

Virtual memory exhausted: Cannot allocate memory

这个报错是在Bandwagon(俗称「搬瓦工」)的10G KVM VPS里碰到的,清楚说明了「虚拟内存耗尽」,增加swap即可解决:

sudo dd if=/dev/zero of=/var/swapfile bs=1M count=2048 &&
sudo chmod 600 /var/swapfile &&
sudo mkswap /var/swapfile &&
echo /var/swapfile none swap defaults 0 0 | sudo tee -a /etc/fstab &&
sudo swapon -a

以上脚本是把一个文件创建成swap分区。因为10G KVM VPS的内存是512M,我就只添加了count=1024,也就是1G的swap,实测可以顺利编译。

备注:YouCompleteMe官方建议使用YCM_CORES=1 ./install.py解决这个报错,实测无效。

解决所有的报错之后,接下来就很简单了:

cd ~/.vim/plugged/YouCompleteMe
./install.py

最终你会看到:[100%] Built target ycm_core,这就表示编译成功了,YouCompleteMe的安装至此全部完成。

Leave A Comment