jedi-vim の設定

追記:
if completeopt = longest is not set, change the default behaviour of … · davidhalter/jedi-vim@42900bb · GitHub
で下記設定は不要になった。


Vimmer な Pythonista にとってとても強力な Vim プラグインの jedi-vim を試してみた。
詳細は mattn さんのエントリを参照。
Big Sky :: python 補完のVimプラグイン「jedi-vim」がスゲー


とても強力だし、補完の速度も今の所特に重いとは思わなかったが、補完時に自動的に候補の最初が選択されるのが気に入らない。
例えば

with open('foo.log', 'r') as f:
    f.

と f の後に . を押せば関連する一覧が表示されるが、デフォルトでは `close` が選択されている。
個人的にデフォルトで選択されているのは使い勝手が良くないので好きじゃない。
というような事を呟いたら [twitter:@mattn_jp] さんに教えて頂いた。

という事で ~/.vim/after/ftplugin/python.vim に以下のように書いてやれば行けた。

if g:jedi#popup_on_dot
  inoremap <buffer> . .<C-R>=jedi#do_popup_on_dot() ? "\<lt>C-X>\<lt>C-O>\<lt>C-P>" : ""<CR>
end

素晴らしい。


あと、カーソルの移動が遅いと思う場合は、vimrc で

let g:jedi#show_function_definition = 0

と関数/メソッドの定義を表示するのをやめると速くなる。
何でかというと、カーソルが移動するたびに jedi#show_func_def() を呼び出す autocmd が定義されているから。
ただし、これをオフにするとメソッドのヒントがポップアップされなくなる。


カーソルの移動で自動で出すのではなく、例えば f.read( と入力している時に とか入力すると jedi#show_func_def() を呼び出して結果を表示するのを期待したけどうまい事行かなかった。
# 余談だけどこのメソッドのヒントをポップアップで表示する方法良いな。
# CUIVim でもちゃんと表示されるのが素晴らしい。是非他のものでも真似してほしい。
# どうやってるんだろう。


ともあれしばらく使い込んでみよう。


あ、そうそう 2012/11/11 の関西の Vim 勉強会#11 で、[twitter:@kozo2] さんが jedi.vim について話されるようだから皆来ると良いと思います!
http://cotocoto.jp/event/71098