有時候會在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的編譯工作。
完成效果:

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