Coc.nvimを触ってみようアドベントカレンダー 4日目 – coc-jedi

とっても楽しいcoc.nvimを触ってみようというアドベントカレンダーです。4日目はcoc-jedi。coc.nvim導入済み環境でPythonを編集する場合には必須とも言えます。
2021.12.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Coc.nvimを触ってみよう Advent Calendar 2021 4日目です。

今回は coc-jedi です。

coc-jedi について

Pythonのjedi-language-serverをcoc.nvimで利用可能にするラッパーです。coc.nvimのPython拡張にはcoc-pyrightもありますが、今回は触れません。

coc-jedi をインストールする

vimを起動した状態で以下のコマンドを実行します。

:CocInstall coc-jedi

併せてjedi-language-serverをインストールします。専用のvirtualenv環境を作成しておいた方がトラブル回避にも役立ちます。

pyenv install 3.9.7
pyenv virtualenv 3.9.7 neovim3
~/.anyenv/envs/pyenv/versions/neovim3/bin/pip3 install jedi-language-server

設定した仮想環境をcoc-settings.jsonに追記します。

:CocConfig
{
  "jedi": {
    "enable": true,
    "startupMessage": false,
    "executable.command": "~/.anyenv/envs/pyenv/versions/neovim3/bin/jedi-language-server"
  }
}

ログでの動作確認時は適当なpyファイルを開いて行います。なければ vim test.py 等でも問題ありません。

vim test.py

:CocCommand workspace.showOutput
Choose by number:
1. jedi
Type number and <Enter> or click with the mouse (q or empty cancels): 1 # Select jedi

使ってみる

以下のように、pythonコードの編集中に補完等が働くようになります。

また、coc-jedi特有の便利機能が存在します。基本的にcoc-settings.jsonにて有効にすることで動作しますが、幾つかは環境依存の設定となります。

coc-jedi経由で指定パスのライブラリをインポートする

特定パスのライブラリを一時的にパス通した上で使おうとする場合に環境変数の順序等で問題が発生しがちですが、coc-jediの設定にてjedi-language-serverを通して編集中に限定して通すことも可能です。

例えば foo/dummy.py を編集中にのみimportしたい場合には以下のように設定を入れます。

{
  "jedi.workspace.extraPaths": ["foo"]
}

あとがき

最近はSaaS側に高性能なエディタが用意されていることもあって、個人的にvim上で編集する機会は減り気味です。ただ、動作環境の更新等による移行時には欠かせません。また、jedi-language-server のインストール先仮想環境のバージョンのメンテナンスも忘れないようにしましょう。

参考