CLOVER🍀

That was when it all began.

Emacsにlsp-mode+Python Language Serverをインストールする

これは、なにをしたくて書いたもの?

EmacsでもLSP(Language Server Protocol)を使えるようなので、ちょっと導入してみようかなと。

EmacsでLSPを使う

EmacsでLSPを使うには、以下の2つのパッケージが有名みたいです。

lsp-mode

LSP Mode - Language Server Protocol support for Emacs - LSP Mode - LSP support for Emacs

eglot

GitHub - joaotavora/eglot: A client for Language Server Protocol servers

今回は、lsp-modeをインストールしてみようかなと思います。

環境

今回の環境は、こちらです。

$  uname -srvmpio
Linux 5.4.0-52-generic #57-Ubuntu SMP Thu Oct 15 10:57:00 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux


$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.1 LTS
Release:    20.04
Codename:   focal


$ emacs --version
GNU Emacs 26.3
Copyright (C) 2019 Free Software Foundation, Inc.
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GNU Emacs
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.

lsp-modeをインストールする

こちらを見ながら、パッケージをインストール。

Installation - LSP Mode - LSP support for Emacs

今回は、melpaのlsp-mode、lsp-uiを選びました。

この時点ではlsp-modeは20201031.1501、lsp-uiは20201024.2307が入りました。

;; lsp-mode
(require 'lsp-mode)
(setq gc-cons-threshold 100000000)
(setq read-process-output-max (* 1024 1024))
(setq lsp-completion-provider :capf)
(setq lsp-idle-delay 0.500)
(require 'lsp-ui)
(setq lsp-ui-imenu-enable t)
(setq lsp-headerline-breadcrumb-enable t)

Performance - LSP Mode - LSP support for Emacs

Settings - LSP Mode - LSP support for Emacs

companyで補完

company-mode for Emacs

Emacsの補完と検索を超強化する - Qiita

;; company
(require 'company)
(global-company-mode t)
(setq company-idle-delay 0)
(setq company-minimum-prefix-length 1)
(setq company-selection-wrap-around t)
(setq completion-ignore-case t)
(define-key company-active-map (kbd "C-n") 'company-select-next)
(define-key company-active-map (kbd "C-p") 'company-select-previous)
(define-key company-active-map (kbd "C-s") 'company-filter-candidates)

Python向けのLanguage Serverとクライアントをインストールする

今回は、Python向けのLanguage Serverおよびクライアントを、言語のリストから探します。

Languages - LSP Mode - LSP support for Emacs

Python向けのものはいくつかあるのですが、今回はこちらを選ぶことにしました。

LSP Pyright

インストールしたバージョンは、20201014.1620です。

以下の設定を追加。

(require 'lsp-pyright)
(add-hook 'python-mode-hook #'lsp

言語のmodeに対してHookを入れるのがポイントみたいです。

(add-hook 'python-mode-hook #'lsp)

ローカルに適切なNode.jsが入っていれば、初回の起動時にpyrightと入力すればLanguage Server(Pyright)はインストールしてくれるようです。

GitHub - microsoft/pyright: Static type checker for Python

スタンダードなのはこっちな気もするのですが、うちの環境だとpylsが重すぎてまともに動作しませんでした…。

Python (Palantir) - LSP Mode - LSP support for Emacs

これで、しばらく使ってみましょう。