2013年3月14日木曜日

jedi-vim in virtualenv(Mac OS X 10.8)

小さいPythonのコードを書くのに一々Eclipseを使うのもなんかなあと思うところがあったので(エクスプローラーバーでディレクトリ開いたり面倒くさい)vimにjedi-vimを入れてPythonの補完を使ってみることにしました。環境はOS X 10.8 vim:ver.7.3です。
こちらを参考に、普通に入れていきます。 ただ、プラグインの管理が面倒なので、折角の機会ということで今までずっとノーマルの状態で使ってきていたvimの環境をちょっと構築することにしました。

NeoBundleを使います。 書いてあるとおりにすれば特に問題なくNeoBundleの設定も済むと思います。一応、シェルでのコマンド類と、.vimrcの関係ある部分を貼っておきます。(NeoBundleの最後の二行が増えただけです )

terminalで

git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
git clone https://github.com/Shougo/vimproc ~/.vim/bundle/vimproc


で、~/.vimrcの中身

" NeoBundle系
set nocompatible " be iMproved
filetype off
if has('vim_starting')
  set runtimepath+=~/.vim/bundle/neobundle.vim
  call neobundle#rc(expand('~/.vim/bundle'))
endif
" Original Repository on Github
NeoBundle 'Shougo/neobundle.vim'
NeoBundle 'Shougo/vimproc'
NeoBundle 'VimClojure'
NeoBundle 'Shougo/vimshell'
NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/neocomplcache'
NeoBundle 'Shougo/neosnippet'
NeoBundle 'jpalardy/vim-slime'
NeoBundle 'scrooloose/syntastic'
" jedi-vim系
NeoBundle 'jmcantrell/vim-virtualenv'
NeoBundle 'davidhalter/jedi-vim'
filetype plugin indent on


参考にしているページに書かれていますが、virtualenv-vimがちゃんとインタプリタ(というか、仮想環境全体)をsys.pathに追加してくれてるのでjedi-vimをいじらなくても勝手にうまいこと行くみたいですね。ちゃんとシェルの設定ファイルに
export $WORKON_HOME='/path_to/virtualenvs'
書いといてあげましょう。
あとは、jedi-vimを入れれば動きます(動くはずです)。
こんなかんじに。

因みにjedi-vimが入ってない状態(python -c 'from jedi import *'したらImportErrorで怒られる)だと、補完はもちろん効きませんしモジュールの名前のあとにドットを入れた瞬間大量のエラーを吐かれます。
↓こんな感じのエラー
Error detected while processing function jedi#complete:
line 1:
Traceback (most recent call last):
Error detected while processing function jedi#complete:
line 1:
  File "<string>", line 1, in<module>
Error detected while processing function jedi#complete:
line 1:
NameError: name 'jedi_vim' is not defined
Error detected while processing function jedi#complete:
line 1:
Traceback (most recent call last):
Error detected while processing function jedi#complete:
line 1:
  File "<string>", line 1, in <module>
Error detected while processing function jedi#complete:
line 1:
NameError: name 'jedi_vim' is not defined


僕はこれで少し躓きましたが…。大概のエラーに関してはGithubのjedi-vimのissuesを見れば解決すると思います。