BETA

neovimにjedi-vimをいれてpythonでコードジャンプする

投稿日:2019-03-20
最終更新:2019-03-20

pythonのコードを読みたくなりコードジャンプしたいなぁということでneovim + jediで実現するまでの流れを記録します。

環境

Neovim v0.3.4
jedi-vim v0.9.0
dein.vim v2.0
Python v3.7.2
arch(antergos)

前提

次がインストールされていること

  • python
  • neovim

pythonでのコードジャンプを実現するには

vimでptyhonのコードジャンプしたいと調べるとjediというプラグインが見つかったので利用します。
davidhalter/jedi: Awesome autocompletion and static analysis library for python.

neovimにプラグインをインストールする

vimに詳しくありません。
neoがあるならneoだろうということでneovimです。
プラグインマネージャーはいくつかあるようですが、deinが現在の主流のようです。
Shougo/dein.vim: Dark powered Vim/Neovim plugin manager

deinのインストール

ダウンロード

readmeに従います。
インストール先だけ必ず指定しないといけないので注意します。

# ~/.local/share/deinにインストールする場合  
curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh  
sh ./installer.sh ~/.local/share/dein  

neovimに設定する

~/.config/neovim/init.vimにreadmeのUnix/Linux or Mac以下の2 Edit your .vimrc like this.の内容を書き込みます。
neovimを開いて:call dein#install()するとインストールされます。

jedi-vimのインストール

システムにインストール

archならpacman -S vim-jediでインストール。
それ以外のOSではjediのreadmeに従ってインストールします。

neovimにロード

システムにインストールしたjediをneovimのパッケージマネージャであるdeinを通じてneovimにロードします。

パッケージ定義ファイルをneovimに読み込ませる

deinはtomlファイルでパッケージを定義します。
~/.config/nvim/init.vimでdeinが使うtomlファイルをロードします。
~/.config/nvim/dein.toml~/.config/nvim/dein_lazy.tomlを定義してみました。
dein_lazyはパッケージが利用されるタイミングでロードされるようです。
たとえばcall dein#load_toml('~/.config/nvim/dein.toml', {'lazy': 0})を追記します。

if &compatible  
  set nocompatible  
endif  
" Add the dein installation directory into runtimepath  
set runtimepath+=~/.local/share/dein/repos/github.com/Shougo/dein.vim  

if dein#load_state('~/.local/share/dein')  
  call dein#begin('~/.local/share/dein')  

  call dein#add('~/.local/share/dein/repos/github.com/Shougo/dein.vim')  
  call dein#add('Shougo/deoplete.nvim')  
  if !has('nvim')  
    call dein#add('roxma/nvim-yarp')  
    call dein#add('roxma/vim-hug-neovim-rpc')  
  endif  

  " 以下を追加  
  " プラグイン設定ファイルの読み込み  
  call dein#load_toml('~/.config/nvim/dein.toml', {'lazy': 0})  
  call dein#load_toml('~/.config/nvim/dein_lazy.toml', {'lazy': 1})  
  call dein#end()  
  call dein#save_state()  
endif  

filetype plugin indent on  
syntax enable  

パッケージを定義する

~/.config/nvim/dein_lazy.tomlを次のように編集します。

[[plugins]]  
repo = 'davidhalter/jedi-vim'  
on_ft = 'python'  

インストールの確認

任意のpythonファイルをneovimで開いて見ます。
エラーがでました。

Error: jedi-vim failed to initialize Python: jedi-vim requires Vim with support for Python 2 or 3. (in function jedi#init_python[3]..<SNR>38_init_python, 行 52)  
jedi-vim: the detected Python version (3) is not functional. Is the "neovim" module installed? While jedi-vim will work, it might not use the expected Python path.  
Error: jedi-vim failed to initialize Python: jedi-vim requires Vim with support for Python 2 or 3. (in function jedi#init_python[3]..<SNR>38_init_python, 行 52)  

ちゃんとはわかっていないのですが、neovimがpython使える状態じゃないよ、みたいな感じでしょうか。
neovimで:checkhelth providerとするとヘルスチェックしてくれるようです。
vim初心者なので意味はわかりませんがpythonに関して問題があるようです。

     ## Python 2 provider (optional)  
   10   - INFO: Disabled (g:loaded_python_provider=1).  This might be due to some previous error.  
   11   - WARNING: No Python executable found that can `import neovim`. Using the first available executable for diagnostics.  
   12   - ERROR: Python provider error:  
   13     - ADVICE:  
   14       - provider/pythonx: Could not load Python 2:  
   15           /usr/bin/python2 does not have the "neovim" module. :help provider-python  
   16           /usr/bin/python2.7 does not have the "neovim" module. :help provider-python  
   17           python2.6 not found in search path or not executable.  
   18           /usr/bin/python is Python 3.7 and cannot provide Python 2.  
   19   - INFO: Executable: Not found  
   20   
   21 ## Python 3 provider (optional)  
   22   - INFO: Disabled (g:loaded_python3_provider=1).  This might be due to some previous error.  
   23   - WARNING: No Python executable found that can `import neovim`. Using the first available executable for diagnostics.  
   24   - ERROR: Python provider error:  
   25     - ADVICE:  
   26       - provider/pythonx: Could not load Python 3:  
   27           /usr/bin/python3 does not have the "neovim" module. :help provider-python  
   28           /usr/bin/python3.7 does not have the "neovim" module. :help provider-python  
   29           python3.6 not found in search path or not executable.  
   30           python3.5 not found in search path or not executable.  
   31           python3.4 not found in search path or not executable.  
   32           python3.3 not found in search path or not executable.  
   33           /usr/bin/python does not have the "neovim" module. :help provider-python  
   34   - INFO: Executable: Not found  

neovimモジュールがないといっています。
pip3 install neovimします。
neovimで:python3 import sys; print(sys.version)pythonが使えるようになったか確認できます。
エラーがでなければ大丈夫。

この状態でpythonのファイルを開けばjedi-vimが使える状態になっているはずです。
neovimで:help jediを実行してjediのマニュアルが表示されれば完了です!

jediでコードジャンプ

デフォルトの設定のjediでコードジャンプするには、メソッド名にカーソルが乗った状態で\ + dを入力します。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@kannaの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!