jedi-vim(ジュダイ-ヴィム)で2ヶ月近くハマった話

f:id:kazy1991:20121203022422j:plain

この記事が参考になると思われる方

  • 駆け出しのpythoniaさん
  • 駆け出しのvimmerさん

今回関係ありそうな私の環境

  • os :osx lion (「・ω・)「ガオー
  • エディタ :macvim kaoriya
  • パッケージ管理ソフト : homebrew (pythonもhomebrew 経由で利用)


10月のはじめに
Big Sky :: python 補完のVimプラグイン「jedi-vim」がスゲー

という記事を見つけて. 「これはいい」と思ってjedi-vimを導入したのですが,どうにも上手く動いてくれなくて2ヶ月近く放置していました.たぶん自分の環境では使えないのかな... と諦めかけていたのですが,昨日@shtn さんから対処法を教えて頂いたのでご紹介します.

追記(2013/8)

jedi.vimのプラグインフォルダ内で

git submodule update --init
で解決します. 詳しくは, vimでpython3を書く時のおすすめの補完設定をご覧ください

これ以降の情報は誤った解決策がなので,おすすめはしません


私の陥った症状

jedi-vimを導入した状態でpythonのファイルを開くと,

ImportError: No module named jedi

って怪しい文字列が一瞬ふわっと出てきて,(一瞬過ぎてキャプれない)
いざ文字を打とうとすると,一文字打つたびに

f:id:kazy1991:20121203001155p:plain

「すごい怒られるよ〜 ( ´Д`) 」
という感じになり,もはや文字を打つこともままならない状態でした.

一応環境の確認も...

もしかしたら「jedi 自体がうまく入らなかったのかな?」とも思い easy_install で確認..

easy_install jedi
Searching for jedi
Best match: jedi 0.5b3
Processing jedi-0.5b3-py2.7.egg
jedi 0.5b3 is already the active version in easy-install.pth

Using /usr/local/lib/python2.7/site-packages/jedi-0.5b3-py2.7.egg Processing dependencies for jedi Finished processing dependencies for jedi

うん,きちんと入ってる.

ipythonでも jedi がインポート出来ていました.

f:id:kazy1991:20121203035814p:plain

更には,vimshell内のpythonも確認しましたが,jedi をインポートしてもエラーでないし,homebrewのpython使っています.

f:id:kazy1991:20121203040101p:plain

こうなってくるとわけがわからなかったのですが,唯一考えられるのはjedi-vimがつかってるpythonは普段使っているhomebrewで導入したpythonではないとということでした.
半ばあきらめ気味にそんなことをtwitterで愚痴っていたら

と有力な情報が!!! .pthというキーワードを頼りに色々調べたら解決しました.

対処法

( このままでも使えるのですがご指摘があったので,後ほど追記します)

vimpythonインターフェースについてはこちらがわかりやすかったです.

VimのPythonインターフェースから使うpythonは変更しにくくPYTHONPATHもちょっと違う - kanonjiの日記

結局のところ(私の場合)vimpython
/Library/Python/2.7/site-packages/
などからライブラリを探しているのですが(確認方法は上記のurl参考),肝心のjediは
/usr/local/share/python/Library/Python/2.7/site-packages/
にあるのでインポートエラーが出ます.そこで「vimpythonさん , こっちにもありんす」 と教えて上げるために先程教えて頂いた..pthファイルを使います.

つまり,/Library/Python/2.7/site-packages/xxx.pth のようなファイルに

/usr/local/lib/python2.7/site-packages/jedi-0.5b3-py2.7.egg

と書き込めば OKです. (パスは環境によって違うと思いますので適宜変更して下さい)

jedi-vimがちゃんと使えるか 確認するためには vimpythonファイルを開き適当なところで C-space(コントロール+ スペース)を押して入力補完が出てくれば問題ありません.

余談

ちなみに,

Python/PYTHONPATH, sys.path, "site"モジュール, "site-packages"ディレクトリ - Glamenv-Septzen.net

さんの記事によると

PYTHONPATH環境変数と "site-packages"ディレクトリ直下の".pth"ファイルは無関係。".pth"ファイルは"site"モジュールが処理するファイル。PYTHONPATHはPython処理系(実行ファイル本体)が処理する環境変数。実例で示したように、それぞれ独立してsys.pathにPATHを追加している。

らしいです. うーーん 難しいですね (´・ω・`)