vim编译jedi-vim或是YouCompleteMe完成python3的自动提示

人走茶凉 提交于 2020-05-08 00:15:41

有时候会在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的编译工作。

完成效果:

如有问题,请在下方留言。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!