pyenvもpipenvもanacondaも全てに対応。鉄の意志で。
やること
今のシェルで呼び出せるpythonを補完する設定です。
~/.vim/ftplugin/python.vim
をこうしました。
pythonx << EOF
import subprocess
import sys
path = subprocess.run(['python','-c','import site; print(site.getsitepackages()[0])'],
stdout=subprocess.PIPE).stdout
path = path.strip()
path = path.decode('utf-8')
path = str(path)if not path in sys.path:
sys.path.append(path)
EOF
解説
最近のpythonではシェルを使うにはsubprocessモジュールのrun()を使うのが良いらしいです。
run()は第一変数にコマンドラインをスペースで分けたリストを放り込めば良いようです。
で、結果を取得したい場合はstdout=subprocess.PIPEというのをつけねばならぬらしい。
返り値はsubprocessモジュールで定義されたオブジェクトで、
その中のstdoutという変数に結果が格納されるようです。
文字列には改行文字が含まれていたりするのでstripで取り除いてあげます。
文字列はバイトの文字列なので、utf-8にデコードしてあげないといけません。
クソ面倒くさくね(´・ω・`)?
でもまぁ、これでどんなpythonの環境でもjediの力が及ぶわけです。
フォースとともにあらんことを。