前提

  • Lazyvimを利用
  • Linter/Formatterはruffを使う
    • 元々プロジェクトはblack/flake8/isortスタックだったが、これらの設定を頑張るよりruffに乗り換えるほうが建設的だと思い移行した(というか、チームメンバーが移行してくれた)
  • typecheckはpyrightを使う
    • Python始めたばかりなのでこだわりがない
      • 使い込んでいって気になったらmypyとかも試してみたい

設定

venvの自動読み込み

$ source .venv/bin/activateしてからnvimを起動すればvenvをlspに読み込ませることができるが、毎回やるのも大変なので起動時に自動で読み込ませるようにする。 実際の設定は以下をそのまま使って完璧に動作した。

Pythonプラグインの有効化

lazyvimにはExtraというプラグイン機能(設定のプリセット)がある。

:LazyExtraでプラグインの有効無効を切り替えることができ、今回はPythonを有効にする。

ちょっとわかりづらいのだが公式ドキュメントに書いてあるのはExtraを有効化したときに設定される設定一覧。Extraによってはconfig.lua経由で設定を変更することができる。

basedpyrightの有効化

config.luaを編集してbasedpyrightを有効化する。 vim.g.lazyvim_python_lsp = "pyright"

通常のpyrightではcode actionでautoimportが使えない。 basedpyrightはvscodeのクローズドソースであるpylanceの機能が組み込まれたlspで、これを使うとneovimでもvscode相当の補完機能が使えるようになる。らしい。

余談だがトップページでpyrightメンテナの保守的な姿勢を批判していてなかなか不穏である。

the maintainer of pyright closes valid issues for no reason and lashes out at users


これだけで補完も型チェックもバッチリ効く。 ruffの設定はプロジェクトのpyproject.toml / ruff.tomlが読み込まれて使われるので特にnvim側での設定は不要。ruff自体にlspが内蔵されているらしい(リアルタイムでのconfig変更とかはうまく効いてないが、そんなに問題ではないかな)。