はじめに
2022年にあたってPythonまわりのEmacsの設定を再び整理した。
今回もLanguage serverの紹介がメイン。
追記:2024年のものには3rd party plugin に ruffを使うものを書いてみた。language serverはお好みで。
tam5917.hatenablog.com
Language server
Emacsからlanguage serverを使うためにeglotを入れる。
さらにPython用のlanguage serverをインストールする。
pip install 'python-lsp-server[all]'
以前の記事ではpython-language-serverを入れていたが、現在メンテナンスが停止している。
github.com
そこでfork版のpython-lsp-serverを入れたというわけだ。
github.com
3rd Party Plugins
それぞれpython-lsp-serverに対応している。
pip3 install python-lsp-isort pip3 install python-lsp-black
python-lsp-isortはimport順を自動でソートしてくれるパッケージである。
python-lsp-blackはblackの仕様に沿ってコードをフォーマットしてくれるパッケージである。
これらはeglot-format-bufferからまとめて起動できるが、バッファをファイルに保存する際にhookとして引っ掛けておくことにした。
設定
;; Python (setq auto-mode-alist (cons '("\\.py$" . python-mode) auto-mode-alist)) (setq interpreter-mode-alist (cons '("python" . python-mode) interpreter-mode-alist)) (require 'eglot) ;; Python-mode起動時にeglotを有効化 (add-hook 'python-mode-hook 'eglot-ensure) ;; 保存時に自動整形 (eglot) (add-hook 'python-mode-hook #'(lambda () (add-hook 'before-save-hook 'eglot-format-buffer nil t))) ;; flycheckはOFFにして、flymakeを使うようにしている。 ;; 以下のパッケージを使うと、メッセージがカーソル位置に出現するので、 ;; エコーエリアと干渉しないのが良い。お好みで。 ;; (with-eval-after-load "flymake" ;; (require 'flymake-diagnostic-at-point) ;; (add-hook 'flymake-mode-hook #'flymake-diagnostic-at-point-mode))