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的編譯工作。

完成效果:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM