vim編譯jedi-vim或是YouCompleteMe完成python3的自動提示

有時候會在Ipython下寫一些測試的demo,有的時候寫好的就直接save到了.py文件,這時候想修改這些py文件的時候,就要用到vim,可是vim不會自動提示關鍵字和一些包裏的方法。 沒事 就試着編譯了一下,須要說明的時候,一開始選型的是jedi-vim,也編譯成功了。後來又試着編譯了YouCompleteMe,仍是比較費事的,踩了一些坑,百度的文章千篇一概,關鍵的問題,沒有說明如何解決。python

寫此文,記錄一下,供參考。linux

升級vim到vim8.x版本

vim --version | grep pythongit

#tips: vim不能同時支持python2和python3,若是要同時支持,須要以動態載入的方式來執行,這裏只支持python3github

一、下載

git clone https://github.com/vim/vim.gitshell

二、編譯:

vim 8.0,出錯,_posixsubprocess.cpython-36m-x86_64-linux-gnu.so undefined symbol PyExc_OSErrorvim

緣由:編譯後,vim 須要用到:/usr/local/python3.6.8/lib/python3.6/lib-dynload/*.so動態庫,緩存

而這些動態庫須要python主庫的一些symbol,在vim裏找不到。ruby

最終解決(仍是須要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

三、建立軟鏈接

mv /usr/bin/vim /usr/bin/vim_bak

ln -sf /usr/local/vim8/bin/vim /usr/bin/vim

四、查看當前vim版本是否支持python3

vim --verison | grep python3

五、測試:

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 編譯出錯 編譯前準備工做: 一、升級gcc到 (GCC) 4.9.2,默認GCC 4.4.7不支持x11 二、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版本。(具體方法查看相關的網頁) 三、編譯好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

具體步驟: 一、升級gcc到 (GCC) 4.9.2,默認GCC 4.4.7不支持x11。 #一、編譯gcc(這個須要的時間比較長,具體參看文章) #二、後續工做 例如安裝在:/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的編譯工做。

完成效果:

若有問題,請在下方留言。

相關文章
相關標籤/搜索