今日見つけた jedi-vim は良い。
davidhalter/jedi-vim - GitHub何が良いって精度が良い。そして標準配布の pythoncomplete がモジュールとそのモジュール内関数しか補完出来ないのに比べ、jedi は評価値を補完出来る。
Using the jedi autocompletion library for VIM.
https://github.com/davidhalter/jedi-vim
そしてスゴイのが構文を仮実行しているのではなく、パースしている点。jedi というモジュールを使って、構文解析している。
davidhalter/jedi - GitHubなので例えば
Awesome autocompletion library for python. It works.
https://github.com/davidhalter/jedi
import time
class Foo():
global time
asdf = time
def asdfy():
with open("foo.log", "w") as f:
f.write("fooooo")
return Foo
xorz = getattr(asdfy()(), 'asdf')
xorz.
こんなコードを補完してもゴミファイルが出来たりしない。そして vim script で頑張る pythoncomplete に比べて速い!上のコードから
さらに関数のヒントまで表示される。
ただ1点だけハマりポイントがあって、この ftplugin はオフィシャルの pythoncomplete とバッティングし得る。先に jedi.vim が読まれる場合、後の pythoncomplete.vim を読ませない為に
autocmd FileType python let b:did_ftplugin = 1
この様に b:did_ftplugin
を設定してやる必要があった(これは後でpull-req送るかも)。また quickrun のキーアサイン <c-r>
ともバッティングするので最終的には jedi の為に以下の設定をした。
let g:jedi#auto_initialization = 1
let g:jedi#rename_command = "<leader>R"
let g:jedi#popup_on_dot = 1
autocmd FileType python let b:did_ftplugin = 1
このキーアサインは、関数名やクラス名をリネームする物で、名前変更後にインサートモードを抜けるとファイル内のシンボルが置き換えられる。調べてないが、構文解析しているので単なる置換ではなく正しいリネーム結果になるはず。試しに上記のコードで文字列内に xorz を埋め込み、xorz をリネームしてみたが文字列内の xorz が置き換わる事は無かった。すばらしい。その他、pydoc が見れる機能やジャンプ機能もある。しばらく使ってみようと思う。