Vim 自动补全之 YCM

IDEA 打开得太慢了,我需要一款轻量级的 IDE,不想装其他乱七八糟的编译器咋办?搞事情!

sublime

sublime 通过简单的配置后可以实现 java 代码的高亮提示和编译功能,并且大多编译错误也能基本上精确到行。
然而 sublime 内置的终端无法输入,虽然在日常的算法中输入操作很少涉及,, 但还是很不爽。

Vim

这里需要一定的 Vim 基础,新手请执行 vimtutor 查看 Vim 官方教程,再继续往后看。
在终端通过 java 命令即可实现 java 代码的编译与运行。
vim 不过起到的是编辑器的作用。
对于编辑器我们不仅有高亮的基本要求,同样也需要基本的代码补全功能, Vim 的 YCM 插件能较好的实现代码补全功能。
下面介绍通过 vim 的 vim-plug 插件管理器 来安装 YCM 。

预备工作

1
2
xcode-select --install
brew install cmake vim

vim-plug 安装

junegunn/vim-plug

1
2
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

安装 YCM

YCM Github

下载

YCM 可通过 vim-plug 下载,而安装使用则需要进一步的编译。

在 .vimrc 文件中添加 Plug 'Valloric/YouCompleteMe' 再执行 :PluginInstall 即可。

编译

YCM 基于 cmake 进行编译的,所以在安装之前如下命令先通过 brew 安装 cmake。

1
2
cd ~/.vim/plugged/YouCompleteMe
python3 ./install.py --java-completer

请使用 python3 。

安装好之后,由于我的 python3 缺乏很多依赖性,通过以下命令检验 python 所缺乏的依赖。

1
2
cd ~/.vim/plugged/YouCompleteMe/third_party/ycmd
cp ycmd/default_settings.json . & python3 ycmd --options_file default_settings.json

如果输出如下,是 python 环境的问题考虑重启然后重装:

1
[1]    8629 segmentation fault  python3 ycmd --options_file default_settings.json

若有如下报错:

1
2
ModuleNotFoundError: No module named 'bottle'
ModuleNotFoundError: No module named 'waitress'

逐句执行 pip3 install bottle pip3 install waitress即可解决。
如果显示是:

1
No module named 'ycm_core'

是没有问题的

YCM 安装 C-family 的自动补全

编译安装

1
2
cd ~/.vim/plugged/YouCompleteMe
python3 ./install.py --clang-completer

安装 ycm-gennerator

1
Plugin 'rdnetto/YCM-Generator'

生成 .ycm_extra_conf.py 文件到 YCM 中

1
python3 .ycm_extra_conf.py ~/.vim/plugged/YouCompleteMe/third_party/ycmd

在 ~/.vimrc 中添加

1
let g:ycm_global_ycm_extra_conf = '~/.vim/plugged/YouCompleteMe/third_party/ycmd/.ycm_extra_conf.py'

go 语言

1
2
cd ~/.vim/plugged/YouCompleteMe
python3 ./install.py --go-completer

其他语言参数

  • C family support: python3 ./install.py --clang-completer
  • C# support: python3 ./install.py --cs-completer (install Mono with Homebrew or by downloading the Mono macOS package
  • Go support: python3 ./install.py --go-completer
  • JavaScript and TypeScript support: python3 ./install.py --ts-completer
  • Rust support: python3 ./install.py --rust-completer
  • Java support: python3 ./install.py --java-completer

更新

1
:PlugUpdate

1
2
3
4
5
cd ~/.vim/plugged/YouCompleteMe
git clean -f
git pull
git submodule update --recursive --init
./install.py --go-completer

错误解决

升级 catalina 后 brew 安装的 python3 执行异常,解决方案如下:
My application crashed with invalid load of lib… |Apple Developer Forums

1
2
3
4
5
6
7
8
9
#!/bin/zsh
brew update & brew upgrade & brew install openssl
cd /usr/local/Cellar/openssl/1.0.2t/lib
sudo cp libssl.1.0.0.dylib libcrypto.1.0.0.dylib /usr/local/lib/
cd /usr/local/lib
mv libssl.dylib libssl_bak.dylib
mv libcrypto.dylib libcrypto_bak.dylib
sudo ln -s libssl.1.0.0.dylib libssl.dylib
sudo ln -s libcrypto.1.0.0.dylib libcrypto.dylib