jedi-vimをインストールしてvimでpythonコードの補完
気づいたらvimでpython開発をやっている日々。。
開発環境を整えようかと思い、vimのプラグインでpythonコードの補完をしようと思いました。
で、pythonコード補完のプラグインを調査してみるとjedi-vimというプラグインがありましたが、インストールの為にはvimのパッケージマネージャの導入が必要との事。
パッケージマネージャのNeoBundleは非推奨になったそうで現在はdeinが使用した方が良いとの事でしたが、deinの環境構築の為にはvimのバージョンが7.4である必要がありました。
ただ、vimのバージョンアップにハマったのでNeoBundleを利用する事に。
非推奨との事ですが、別にvimでpythonの補完が出来れば良いので!
環境
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-vim や vim-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
で設定反映。
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
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
あまりにも重たいので後日アンインストールした。。
もっと軽い補完プラグイン探そう・・