みつきんのメモ

組み込みエンジニアです。Interface誌で「Yocto Projectではじめる 組み込みLinux開発入門」連載中

emacsのlanguage serverをEglotに乗り換える

はじめに

lsp-modeがあまり使いやすくないのでemacs 29から標準に入ったEglotに乗り換える。

環境設定

emacs

Ubuntu 22.04のemacsは古いのでsnapを使用する。 aptなどでインストール済みのものがある場合は削除しておく。

$ sudo snap install emacs --classic

Node.js

いくつかのlanguage serverはNode.jsで実装されているのでsnapでインストールする。

$ sudo snap install node --classic

pip3

いくつかのlanguage serverはPython3で実装されているのでpip3をインストールする。

$ sudo apt install python3-pip

language serverのインストール

下記をインストールする

  • bash-language-server
  • bitbake-language-server
  • cmake-language-server
  • html-languageservice
  • clangd
$ npm install bash-language-server
$ npm install --save vscode-html-languageservice
$ pip3 install --user bitbake-language-server
$ pip3 install --user cmake-language-server
$ pip3 install --user python-lsp-server
$ sudo apt install clangd

init.elの設定

;; eglot(LSP)
(use-package eglot
  :ensure t
  :hook
  (c++-mode . eglot-ensure)
  (sh-mode . eglot-ensure)
  (python-mode . eglot-ensure)
  (html-mode . eglot-ensure)
  (cmake-mode . eglot-ensure)
  (bitbake-mode . eglot-ensure)
  :config
  (add-to-list 'eglot-server-programs '((bitbake-mode) "bitbake-language-server"))
  :bind (("M-t" . xref-find-definitions)
     ("M-r" . xref-find-references)
     ("C-t" . xref-go-back)))

まとめ

lsp-modeはサポートしていないLSPサーバを登録するのにいろいろ書かないといけないし プロジェクトルートを登録するか毎回聞いてきてウザいなと色々不満があった。 設定が汚れてくるとまともにサーバと接続できなくて~/.emacs.d/.lsp-session-v1を削除することもしばしば。

eglotはサーバの登録も簡単だし毎回プロジェクトルートを聞いてくることもない。 今の所の使用感はかなり良い。