在mac上通过Vundle安装YouCompleteMe(YCM)
折腾
1. 前言
- 这是一份基于YCM的安装步骤教程总结, 只记录我实际在机器上进行过的操作过程.
- 我主要需要的是针对python代码的补全.
- 我前后分别在ubuntu和当前的苹果设备上成功安装过几次YCM, 当然失败的次数更多, 现在回顾来看并不难, 但官网的指南虽然详细但又比较杂乱, 所以也是在此做个笔记记录下.
- 根据我多次失败的经验, 安装的难点主要集中在网络环境, 安装的过程涉及很多自github的下载, 所以安装前请一定确保你具有能流畅访问github的网络条件.
2. 本机环境
- 使用机器: Mac mini M4 10核, 16G RAM, 256G SSD
- 已通过Python官网的安装包安装了Python3.10
- 未安装xcode之类的开发者套件
- 未安装Anaconda或Poetry之类的Python环境管理工具
3. 检查python运行时
检查自带的vim是否满足要求, 即需要能通过--enable-framework
(mac端)编译才行.
vim
打开vim编辑器- 输入以下命令确认是否满足要求:
:py3 import sys; print(sys.version)
如果成功, 应该会输出版本号信息, 比如3.8.2 (...)
我这边在执行以上命令后输出以下错误信息:
E319: Sorry, the command is not available in this version
这代表我的python环境不满足YCM的要求. 没关系, 我们先继续后面的步骤.
当前机器预置的vim版本其实本就不符合YCM的安装要求, 所以如果你和我一样没有额外配置, 那本步骤是肯定会失败的.
4. 安装Vundle
使用Vundle这个vim插件管理工具作为YCM的下载器.
- 将插件下载至vim的插件保存路径中
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
- 将以下代码复制到
~/.vimrc
中的最顶部, 置于你自己的配置内容之上, 保存并退出. 这里仅囊括了安装Vundle所需的插件, 没有把Vundle安装示例中的其它插件加入:
set nocompatible " be iMproved, required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList - lists configured plugins
" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
- 安装插件
使用vim
命令打开一个vim窗口, 输入以下命令进行安装:
:PluginInstall
左下提示Done!
就代表安装成功, 可以正常退出了.
5. 通过Vundle安装YCM
在上一章节中安装好Vundle后, 我们就可以通过它来管理要为vim下载的插件, 使用也很简单, 在git上找到自己想要的插件, 通过以下格式写入.vimrc
中Vundle对应的配置代码块即可(注意用单引号包括起来):
Plugin '<git作者名>/<git仓库插件名>'
此处我们要安装YCM, 那么它在github中的仓库名为ycm-core / YouCompleteMe
, 那么我们的插件名就写作:
Plugin 'ycm-core/YouCompleteMe'
把这行代码加入配置文件, 最终在.vimrc
中的配置如下:
set nocompatible " be iMproved, required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" YCM plugin
Plugin 'ycm-core/YouCompleteMe'
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList - lists configured plugins
" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
同样地, 保存退出, 然后随机打开一个vim窗口, 通过:PluginInstall
安装.
注意, 这一步会从github下载相应的仓库内文件, 对网络有要求, 请保证能顺利连接至github, 如果中途出错, 多执行这个命令几遍重复安装就行.
如果你不想继续安装(这里确实很麻烦), 直接删除
~/.vim/bundle
下的Vundle.vim
这个文件夹, 然后删除~/.vimrc
中对应的配置文件, 就可以完成之前的卸载了.
显示安装成功后, 如果你和我当前的步骤一致, 没有进行其它配置, 此时在vim窗口中应该还会有以下警告字样:
YouCompleteMe unavailable: requres Vim compiled with Python (3.8.0+) support.
这是正常的, 因为当前Mac内置的python不满足编译需求. 没关系, 我们暂且退出编辑器, 进行后续配置.
6. 安装Homebrew
正如前面所说, 本机器预装的vim不满足YCM的安装条件, 所以我们需要更改vim的安装, 在这里我选用的是最简单的方法, 使用homebrew
安装一个独立于本机且满足YCM环境的vim.
YCM安装其它依赖需要依靠brew
命令, 通过以下命令安装, 或通过homebrew的官网, 直接下载对应的.pkg
安装包进行安装:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
安装后在终端通过brew -- version
确认安装是否成功, 如果发生报错: zsh: command not found: brew
, 将以下代码复制到~/.zshrc
最顶部, 并重启终端应该就可以了:
export PATH=/opt/homebrew/bin:$PATH
- 注意这里务必将
/opt/homebrew/bin
像这样置于PATH
之前, 这样可保证之后自动使用homebrew安装的程序.- 对于arm架构(M芯片)的苹果设备, homebrew的安装程序是默认在这个路径里的. 与本机的预置路径
/usr/bin
相隔离, 这样即便你删掉了homebrew安装的程序, 也不会影响原程序.
7. 配置YCM环境
使用homebrew安装所需依赖, 注意本步骤对网络要求也很高. 不然会出现下载速度极慢的问题. homebrew貌似可以改国内镜像源, 但我没研究过.
- 安装
CMake
,MacVim
和Python 3
, 这些对应了YCM所支持的补全语言:
brew install cmake python go nodejs
- 安装YCM支持的vim:
brew install vim
- 完成以上两步后, 你可以通过
python3
查看下对应的python环境, 此时应该已被切换到了python3.13版本, 因为homebrew下的vim是依赖这个版本的.- 同时也请放心, 原本的python并没有被覆盖, 仍可以通过以下命令访问:
/Library/Frameworks/Python.framework/Versions/3.10/bin/python3
- 最后一步, 编译YCM:
cd ~/.vim/bundle/YouCompleteMe
python3 install.py --all
在这一步你可能会碰到类似于urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]
这样的问题导致编译失败, 此时通过访达或菜单进入你自己的/Applications/Python 3.10
文件夹, 双击运行其中的Install Certificates.command
文件, 它会自动打开一个终端运行命令并执行, 完成后重启终端, 再重新执行编译命令即可. 至于为什么这个有效, 别问我, 我不知道(doge).
(可选) 8. 收尾工作
上面的操作完成后, 你可以自行建立一个python文件来测试下, 应该可以进行自动补全了.
- homebrew版的vim可能是中文界面, 如果想切回英文, 把以下两行加入到
.vimrc
的顶部:
set langmenu=en_US
let $LANG='en_US'
- 当前使用自动补全时, 它会自动帮你打开一个新窗口显示提示, 很占位置, 把以下命令加入到
.vimrc
中来禁用:
set completeopt-=preview
参考
- https://github.com/VundleVim/Vundle.vim#about
- https://github.com/ycm-core/YouCompleteMe#installation
- https://stackoverflow.com/questions/68275857/urllib-error-urlerror-urlopen-error-ssl-certificate-verify-failed-certifica/77834685
- https://formulae.brew.sh/formula/vim#default
- https://www.reddit.com/r/vim/comments/rmdq41/how_to_stop_youcompleteme_from_showing_preview/