zoukankan      html  css  js  c++  java
  • 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的编译工作。

    完成效果:

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

  • 相关阅读:
    DS博客作业04--图
    DS博客作业03--树
    DS博客作业02--栈和队列
    DS01-线性表
    c博客06-结构体&文件
    C博客作业05--指针
    123
    面向对象设计大作业
    购物车
    有理数类的设计
  • 原文地址:https://www.cnblogs.com/taowang2016/p/11075620.html
Copyright © 2011-2022 走看看