Vimメモ : jedi-vimでPythonの入力補完
インストール
前提条件
Vimが+pythonでコンパイルされている必要があるので下記コマンドで確認。Python3を使うため+python3/dynとなっていればよさそう(dynは動的リンクということらしい)。この状態だとVimで:echo has('python3')を実行すると1が返ってくる。
$ vim --version | grep python +cryptv +linebreak -python +vreplace +cscope +lispindent +python3/dyn +wildignore
jedi-vimではjediライブラリを使用するので、jediをインストールしておく必要がある。pipの場合は下記コマンドを実行。ただし、このプラグイン以外にjediを使用する予定がないのであれば後で説明するgit submoduleとしてインストールする方法もある。
$ pip install jedi
また、関数パラメータ補完機能を使用するためにはVimのバージョンが7.3以上で、+concealとなっている必要があるとのこと。
$ vim --version | grep conceal +conceal +libcall +profile +viminfo
インストール方法
NeoBundleの場合は下記行をvimrcに追加。
NeoBundle 'davidhalter/jedi-vim'
deinの場合は下記行をdeinlazy.tomlなどに追加。
[[plugins]] repo = 'davidhalter/jedi-vim' on_ft = 'python'
そしてjediを個別にインストールする場合はjedi-vimディレクトリでサブモジュールの更新と初期化を行う。
$ git submodule update --init
インストールが成功していればVimで:help jedi-vimでヘルプ画面が表示されるようになる(ヘルプが表示されない場合は:helptags {path/to/vimruntime}/docの実行が必要かも)。

基本的な使い方
インストールが成功していればデフォルトの設定で動作が確認でき、以下のようにPythonのファイルを開いて.を入力すると補完候補が表示される。

続いて文字を入力すれば候補が絞り込まれる。

また、関数名の後で(を入力すると引数が表示される。

FAQ
FAQがあったので見てみる。
https://github.com/davidhalter/jedi-vim#faq
docstringのポップアップを無効
補完時にdocstring(モジュール、クラス、関数などの説明文)のポップアップウィンドウ(前のキャプチャ画像で上部に表示されている)が表示されるが、無効にしたい場合はvimrcに下記行を追加。
autocmd FileType python setlocal completeopt-=preview
タブキーで補完
タブキーを押して補完したい場合はsupertabプラグインを使用するとよいらしい。
NeoBundleの場合は下記行をvimrcに追加してインストール。
NeoBundle 'ervandew/supertab'
タブキーを押しても補完できない場合や、補完の順番が逆になる場合は下記行をvimrcに追加。
let g:SuperTabContextDefaultCompletionType = "context" let g:SuperTabDefaultCompletionType = "<c-n>"
補完が遅い
Numpyなどのライブラリの補完は1回目は時間がかかることがあるが、2回目以降は結果がキャッシュされるので高速に補完できるとのこと。
デフォルト設定
基本的な使い方はわかったのでデフォルト設定をヘルプで確認してみる。
| 項目 | キー | 説明 |
| g:jedi#completions_command | <Ctrl-Space> | 補完開始 |
| g:jedi#goto_command | <leader>d | Definition(またはAssignment)に移動 |
| g:jedi#goto_assignments_command | <leader>g | Assignmentに移動 |
| g:jedi#goto_definitions_command | - | 非推奨なので#goto_commandを使用 |
| g:jedi#documentation_command | <K> | pydoc表示 |
| g:jedi#rename_command | <leader>r | 変数リネーム |
| g:jedi#usages_command | <leader>n | 使用箇所表示 |
| :Pyimport | :Pyimport | モジュールのオープン |
上記のようにjedi-vimでは補完だけでなく定義への移動やpydocの表示などができる。
キー設定を変更したい場合は、
let g:jedi#completions_command = "<C-N>"
のようにvimrcに記述すればよい。
その他の設定値としては以下のものがあり、1の場合は有効化されている。
| 項目 | デフォルト | 説明 |
| g:jedi#auto_initialization | 1 | 自動で初期化 |
| g:jedi#auto_vim_configuration | 1 | completeoptの設定 |
| g:jedi#popup_on_dot | 1 | ピリオド(.)を入力したら補完 |
| g:jedi#popup_select_first | 1 | 補完候補の1番目を選択 |
| g:jedi#auto_close_doc | 1 | プレビューウィンドウを自動で閉じる |
| g:jedi#show_call_signatures | 1 | 関数の引数表示を有効化(2を指定すればコマンドラインに表示) |
| g:jedi#show_call_signatures_delay | 500 | 関数の引数表示をするまでの時間(millisecondで指定) |
| g:jedi#use_tabs_not_buffers | 0 | 定義移動などをタブで表示 |
| g:jedi#squelch_py_warning | 0 | Vimが+pythonでコンパイルされていない場合に表示する警告を無効にしたいときは1に |
| g:jedi#completions_enabled | 1 | 補完機能を有効化 |
| g:jedi#use_splits_not_buffers | "" | 定義移動などを分割で表示。"left", "right", "top", "bottom", "winwidth"を指定 |
| g:jedi#force_py_version | "auto" | Python2, Python3の両方がインストールされている場合にどちらを使用するか指定 |
| g:jedi#smart_auto_mappings | 1 | from module.name<space>と入力したときの補完を有効化 |
| g:jedi#use_tag_stack | 1 | タグスタック機能を有効化 |
設定値を変更したい場合は、
let g:jedi#use_tabs_not_buffers = 1
のようにvimrcに記述すればよい。
補完以外の機能
定義へ移動
例えば、以下のようなファイル構成のときにfile1.pyのfooにカーソルを置いて、<leader>dを押すと定義元のfile3.pyのbar()に移動するが、<leader>gを押すとfile2.pyのfooに移動する。
# file1.py: from file2 import foo # file2.py: from file3 import bar as foo # file3.py def bar(): pass
pydoc表示
調べたい単語にカーソルを置いてKを押すとpydocが表示される。

変数リネーム
リネームしたい変数にカーソルを置いて<leader>rを押すと、変数が削除されて挿入モードになる。そして、新しい変数名を入力して挿入モードを抜けると関連する部分がリネームされる。

使用箇所表示
使用箇所を調べたい単語にカーソルを置いて<leader>nを押すとQuickfixにリストが表示される。


- 作者: Bill Lubanovic,斎藤康毅,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/12/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (2件) を見る