読者です 読者をやめる 読者になる 読者になる

ボールを蹴りたいシステムエンジニア

ボール蹴りが大好きなシステムエンジニア、ボールを蹴る時間確保の為に時間がある時には勉強する。

jedi-vimをインストールしてvimでpythonコードの補完

気づいたらvimpython開発をやっている日々。。
開発環境を整えようかと思い、vimプラグインpythonコードの補完をしようと思いました。

で、pythonコード補完のプラグインを調査してみるとjedi-vimというプラグインがありましたが、インストールの為にはvimのパッケージマネージャの導入が必要との事。
パッケージマネージャのNeoBundleは非推奨になったそうで現在はdeinが使用した方が良いとの事でしたが、deinの環境構築の為にはvimのバージョンが7.4である必要がありました。
ただ、vimのバージョンアップにハマったのでNeoBundleを利用する事に。
非推奨との事ですが、別にvimpythonの補完が出来れば良いので!

環境

CentOS6
vim7.2
python3.4.2(pyenv)

手順

pluginのダウンロード、インストール

curl https://raw.githubusercontent.com/Shougo/neobundle.vim/master/bin/install.sh > install.sh
sh ./install.sh
rm -rf install.sh

良くわからんが必要らしいので実行。

cd ~/.vim/bundle/jedi-vim/jedi/
git submodule update --init

vimrc編集

vi ~/.vimrc  

追記
"NeoBundle 'davidhalter/jedi-vim'"
の行でjedi-vimをインストールしてる。

" Note: Skip initialization for vim-tiny or vim-small.
if 0 | endif

filetype off

if has('vim_starting')
  if &compatible
    set nocompatible               " Be iMproved
  endif

  set runtimepath+=~/.vim/bundle/neobundle.vim
endif

call neobundle#begin(expand('~/.vim/bundle/'))

" originalrepos on github
NeoBundle 'Shougo/neobundle.vim'
NeoBundle 'Shougo/vimproc', {
  \ 'build' : {
    \ 'windows' : 'make -f make_mingw32.mak',
    \ 'cygwin' : 'make -f make_cygwin.mak',
    \ 'mac' : 'make -f make_mac.mak',
    \ 'unix' : 'make -f make_unix.mak',
  \ },
  \ }
NeoBundle 'davidhalter/jedi-vim'
""NeoBundle 'https://bitbucket.org/kovisoft/slimv'

call neobundle#end()

filetype plugin indent on     " required!
filetype indent on
syntax on

NeoBundleCheck

適当なファイルをvimで開くと、いきなり変なメッセージ出てきてインストールはじまったぽい。。
数分で終わりました。

以下のような情報もあった、本来はそうするのかも。
>Vimのコマンドモードで:source ~/.vimrcを実行.
>NeoBundleInstallのダイアログ(GVim使ってます)が出てくるのでyesを選択.
>これでプラグインがダウンロード&インストールされます.

インストール後、実際にpythonファイルをvimで開いて実装。
モジュール名入力してピリオドを入力するとコード補完のプルダウンが表示された!

…けど、numpyやpandasといったライブラリの場合は補完が表示されない。

調査した所、pyenv環境を使用している事が原因みたいです。
jedi-vimでは標準python側のライブラリ(ディレクトリ)を参照しているようです。

という事で対処

対処1

jedi-vimvim-pyenc のロードよりも前に以下を追記

" ~/.pyenv/shimsを$PATHに追加
let $PATH = "~/.pyenv/shims:".$PATH

jedi-vimの後ろに以下を追記

" pyenv 処理用に vim-pyenv を追加
" Note: depends が指定されているため jedi-vim より後にロードされる(ことを期待)
NeoBundleLazy "lambdalisue/vim-pyenv", {
      \ "depends": ['davidhalter/jedi-vim'],
      \ "autoload": {
      \   "filetypes": ["python", "python3", "djangohtml"]
      \ }}

:wで保存後
:source ~/.vimrc
で設定反映。

pythonファイルをvimで開いた所、以下のエラー?出た

vim-pyenv: Failed to activate "3.5.0". Python version of the env is not supported in this Vim.  

なんかハマったので別案・・・

対処2

ftpluginディレクトリ作成

mkdir ~/.vim/ftplugin/

pythonファイル用設定作成

vi ~/.vim/ftplugin/python.vim

以下を定義

import os
import sys

path = os.path.expanduser("/root/.pyenv/versions/3.5.0/lib/python3.5/site-packages")
if not path in sys.path:
    sys.path.append(path)

適当にファイルをvimで開いて以下を実行し、pyenvのパッケージのパスが追加されてればOK

:py print(sys.path)

pandasやnumpyでも保管できた。

出来たんだけど・・・

遅い。

ピリオド打ったら少し固まる。


最終的な設定ファイルは以下のようになった。
.vimrc

" Note: Skip initialization for vim-tiny or vim-small.
if 0 | endif

filetype off

if has('vim_starting')
  if &compatible
    set nocompatible               " Be iMproved
  endif

  set runtimepath+=~/.vim/bundle/neobundle.vim
endif

call neobundle#begin(expand('~/.vim/bundle/'))

" originalrepos on github
NeoBundle 'Shougo/neobundle.vim'
NeoBundle 'Shougo/vimproc', {
  \ 'build' : {
    \ 'windows' : 'make -f make_mingw32.mak',
    \ 'cygwin' : 'make -f make_cygwin.mak',
    \ 'mac' : 'make -f make_mac.mak',
    \ 'unix' : 'make -f make_unix.mak',
  \ },
  \ }
NeoBundle 'davidhalter/jedi-vim'
""NeoBundle 'https://bitbucket.org/kovisoft/slimv'

call neobundle#end()

filetype plugin indent on     " required!
filetype indent on
syntax on

autocmd FileType python setlocal completeopt-=preview

NeoBundleCheck

~/.vim/ftplugin/python.vim

python << EOF
import os
import sys

path = os.path.expanduser("/root/.pyenv/versions/3.5.0/lib/python3.5/site-packages")
if not path in sys.path:
    sys.path.append(path)
EOF

あまりにも重たいので後日アンインストールした。。

もっと軽い補完プラグイン探そう・・