vim编译jedi-vim或是YouCompleteMe完成python3的自动提示
有时候会在Ipython下写一些测试的demo,有的时候写好的就直接save到了.py文件,这时候想修改这些py文件的时候,就要用到vim,但是vim不会自动提示关键字和一些包里的方法。
没事 就试着编译了一下,需要说明的时候,一开始选型的是jedi-vim,也编译成功了。后来又试着编译了YouCompleteMe,还是比较费事的,踩了一些坑,百度的文章千篇一律,关键的问题,没有说明如何解决。
写此文,记录一下,供参考。
升级vim到vim8.x版本
vim --version | grep python
tips: vim不能同时支持python2和python3,如果要同时支持,需要以动态载入的方式来执行,这里只支持python3
1、下载
git clone https://github.com/vim/vim.git
2、编译:
vim 8.0,出错,_posixsubprocess.cpython-36m-x86_64-linux-gnu.so undefined symbol PyExc_OSError
原因:编译后,vim 需要用到:/usr/local/python3.6.8/lib/python3.6/lib-dynload/*.so动态库,
而这些动态库需要python主库的一些symbol,在vim里找不到。
最终解决(还是需要google):
https://github.com/vim/vim/issues/3629
export LDFLAGS="-rdynamic",这个问题困扰了我快3天时间,百度出来的网页编译vim后,都有undefined symbol错误,其实是没有找到根本原因。
export LDFLAGS="-rdynamic",将主库里symbol导出至动态库/usr/local/python3.6.8/lib/python3.6/lib-dynload/*.so的符号表里。
rm -fr /usr/local/vim8
mkdir -p /usr/local/vim8
cd vim/src
./configure --with-features=huge
--enable-cscope
--enable-python3interp
--with-python3-config-dir=/usr/local/python3.6.8/lib/python3.6/config-3.6m-x86_64-linux-gnu
--enable-multibyte
--enable-fontset
--prefix=/usr/local/vim8'
其中:/usr/local/python3.6.8是python3的安装路径(python3要以--enable-shared参数安装,如果是python3.6.5以上,还需要指定:--with-openssl参数,下面会有原因说明)
----暂时不需要的config参数
--enable-rubyinterp
--enable-luainterp
--enable-perlinterp
--with-python3-config-dir=/opt2/python-3.6.5/lib/python3.6/config-3.6m-x86_64-linux-gnu
--with-python3-config-dir=/usr/local/python3.7.2/lib/python3.7/config-3.7m-x86_64-linux-gnu \
make && make install
tips:(如果make的时候出错,执行make distclean)
make distclean
3、创建软连接
mv /usr/bin/vim /usr/bin/vim_bak
ln -sf /usr/local/vim8/bin/vim /usr/bin/vim
4、查看当前vim版本是否支持python3
vim --verison | grep python3
5、测试:
python3 import subprocess;print(subprocess)
安装jedi,jedi-vim和YouCompleteMe 都依赖这个模块来完成自动提示
pip install jedi
-------vim 的 插件管理器 Vundle ---------
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
配置.vimrc文件,下载vundle插件,配置参数,开始DIY自己的编辑器
cd ~
touch .vimrc
vi .vimrc
set nocompatible " be iMproved, required
set backspace=indent,eol,start
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
Plugin 'Valloric/YouCompleteMe'
" Plugin 'davidhalter/jedi-vim'
" Plugin 'ervandew/supertab'
" All of your Plugins must be added before the following line
call vundle#end() " required
set number
set background=dark
set tabstop=4
set autoindent
set softtabstop=4
syntax on
filetype plugin indent on " required
打开vim 执行安装
:PluginInstall
cd /root/.vim/bundle/YouCompleteMe
python3 install.py
Tips:
YouCompleteMe 编译出错
编译前准备工作:
1、升级gcc到 (GCC) 4.9.2,默认GCC 4.4.7不支持x11
2、YouCompleteMe,需要python3,以动态连接库的方式去编译,即python3在编译的时候需要加上:--enable-shared,同时在python3.6.5之后在使用pip的时候,需要ssl,
所以也需要指定:--with-openssl=/usr/local/ssl,/usr/local/ssl是openssl的安装路径,同时python3,需要openssl的版本在1.0.2或是1.1.1之上,所以有可能需要升级系统的
openssl版本。(具体方法查看相关的网页)
3、编译好python3之后,需要把python3的动态库加载到系统缓存(这里假设/usr/local/python3.6.8/是python3的安装路径)
修改配置:echo "/usr/local/python3.6.8/lib" >> /etc/ld.so.conf
加载:ldconfig -v
查看:ldd /usr/local/python3.6.8/bin/python3
具体步骤:
1、升级gcc到 (GCC) 4.9.2,默认GCC 4.4.7不支持x11。
1、编译gcc(这个需要的时间比较长,具体参看文章)
2、后续工作
例如安装在:/usr/local/gcc/
touch /etc/profile.d/gcc.sh
echo "export PATH=/usr/local/gcc/bin:$PATH" >> /etc/profile.d/gcc.sh
. /etc/profile.d/gcc.sh
查看系统里的gcc和cc编译器,which gcc,which cc,发现并没有cc编译器,指定cc编译器。
ln -sf /usr/local/gcc/bin/gcc /usr/local/gcc/bin/cc
这里要注意,平时执行ln之后就会立刻生效,这里执行生成cc之后,which cc已经生效,可能去编译YouCompleteMe的时候发现使用的c 编译器还是老的GCC 4.4.7
解决办法:退出当前shell,再次进入系统进行YouCompleteMe的编译工作。
完成效果:
如有问题,请在下方留言。