CLOVER🍀

That was when it all began.

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

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

EmacsBashを書く時に、LSPを使いたいなと思いまして。

むしろ、どうして今まで使っていなかったんでしょう 笑

EmacsでLSPを使う時には、lsp-modeを使います。

Bash Language Server

lsp-modeでBashを使う時のLanguage Serverとしては、Bash Language Serverが紹介されています。

Bash - LSP Mode - LSP support for Emacs

GitHubリポジトリーはこちら。

GitHub - bash-lsp/bash-language-server: A language server for Bash

このBash Language Serverをインストールしてみましょう。

環境

今回の環境はこちら。Emacsにlsp-modeおよびsh-mode(shell-script-mode)はインストール済みとします。

$ emacs --version
GNU Emacs 29.3
Copyright (C) 2024 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.

OSはUbuntu Linux 24.04 LTSです。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.3 LTS
Release:        24.04
Codename:       noble


$ uname -srvmpio
Linux 6.8.0-79-generic #79-Ubuntu SMP PREEMPT_DYNAMIC Tue Aug 12 14:42:46 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

またBash Language ServerのインストールにはNode.jsを使用します。

$ node --version
v22.19.0


$ npm --version
10.9.3

Bash Language Serverをインストールする

Bash Language Serverはnpmパッケージとしてインストールするか、Ubuntu Linuxの場合はsnapでインストールすることになるようです。

Bash Language Server / Installation / Bash language server

その前に、依存関係としてShellCheckとshfmtをインストールすることを勧められているのでインストールしておきます。

$ sudo apt install shellcheck shfmt


$ shellcheck --version
ShellCheck - shell script analysis tool
version: 0.9.0
license: GNU General Public License, version 3
website: https://www.shellcheck.net


$ shfmt --version
3.8.0

Bash Language Server / Installation / Dependencies

あとはBash Language Serverのインストールです。

$ npm i -g bash-language-server

バージョン確認。

$ bash-language-server --version
5.6.0

Emacsに設定する

あとはEmacsに設定します。

Bash Language Server / Clients / Emacs

こんな感じでしょうか。

;; bash
(use-package lsp-mode
  :ensure t
  :commands (lsp lsp-deferred)
  :hook (sh-mode . lsp-deferred))

確認。