これは、なにをしたくて書いたもの?
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 (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向けのものはいくつかあるのですが、今回はこちらを選ぶことにしました。
インストールしたバージョンは、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
これで、しばらく使ってみましょう。