
2026/05/23 23:55
Vim に LISP(2019)
RSS: https://news.ycombinator.com/rss
要約▶
日本語訳:
このテキストは、2019 年末時点で Common Lisp 開発向けに Vlime よりも Slimv Vim プラグインを推奨しており、より成熟した多機能な体験を提供しているとしています。主な利点には、Vlime の Common Lisp 限定サポートに対して複数の Lisp диалекト(Common Lisp、Scheme、Clojure)に対応する強力な支援が挙げられ、組み込みの Pareditによる自動インデントと s-expression ナビゲーション、さらにデバッグを簡素化するインタラクティブで修正可能な REPL バッファが含まれます。両方のプラグインは Swank サーバーアーキテクチャに依存していますが、Slimv は特別なお問い合わせモードを必要とせず完全編集可能な REPL 入力に対応するのに対し、Vlime の REPL は直接編集できません。また推奨理由には、Slimv がバンドルしている Paredit(Vlime は別途インストールが必要)、結果表示用のステータスライン、そして tmux/Screen/Desktop 環境との連携による Swank の自動起動などがあります。著者はまた、最近の Vlime の表示バグ修正と、執筆中に解決された特定の Slimv の 4 つの問題についても言及しています。全体的に、Lisp 環境間の柔軟性と高度な編集機能を手軽な追加設定なしで求めている開発者にとって、Slimv が明確な選択肢として提示されています。
本文
開発者の Susam Pal:Vim で Lisp を書くためのツール比較 - Slimv と Vlime
本記事は、2019 年 12 月に著者 Susam Pal 氏により執筆されました。
イントロダクション
-
背景:
- 15 年前、Vim で Lisp コードを書くのは珍しかったです。優れたプラグインや REPL (Read-Eval-Print-Loop)、デバッガの組み込みは存在しませんでした。
- 過去 10 年で状況が大幅に改善されました。Slimv(10 年以上の歴史)と Vlime(最近、3 年未満)という二つの主要な Vim プラグインが登場しました。
- どちらも Lisp でのインタラクティブなプログラミングをサポートしています。
-
本稿の内容:
- Slimv と Vlime の両者の議論・比較を行います。
- 基本機能や始め方を紹介します(網羅的ではありません)。
- 詳しいチュートリアルは「参考文献」セクションをご覧ください。
- 比較や推奨のみをお求めの場合は、「Slimv と Vlime の比較」または「簡易的な推奨」セクションを参照してください。
-
目次
- 背景
- Lisp, Emacs: SLIME, Vim: Slimv/Vlime
- Vim プラグインの管理方法
- ソフトウェアバージョン
- はじめ方
- Slimv と SBCL で始める
- Vlime と SBCL で始める
- Paredit で始める
- デバッガとインスペクタの使用
- Slimv, Vlime
- 関数のトレース機能
- Slimv, Vlime
- おもちゃのような便利機能 (Nifty Features)
- トップレベル式の評価、ラインボウ・パーレンセズ、アーグメントリスト、オムニ補完、シボル記述、マクロ展開、クロス参照
- 他の Common Lisp 実装
- CLISP, ECL
- 他の Lisp 方言
- MIT/GNU Scheme, Clojure
- Slimv と Vlime の比較
- 簡易的な推奨
- 免責事項 (Disclosure)
- 参考文献
- 背景
背景
Lisp
Lisp は括弧化されたプレフィックス表記を持つ言語です。C や Python とは異なり、ホモイコニック性(コードがデータと同一)や強力なマクロシステムにより、極めて柔軟で拡張可能な言語となります。
-
代表的な文献:
- 「平均を凌ぐ」 (Paul Graham)
- 「Lisp の性質」 (Slava Akhmechet)
- 「なぜ Lisp が神のプログラミング言語となったのか」 (Sinclair Target)
-
歴史的評価:
- Alan Kay: 「設計された中で最も優れた単一のプログラミング言語」
- John Foderaro: 「Lisp はプログラミング可能なプログラミング言語である」
- Eric S. Raymond: Lisp の理解は「深い啓発体験」であり、より優れたプログラマを作る。
Emacs: SLIME
多くの Lisp プログラマーが Emacs を好みます。SLIME (Superior Lisp Interaction Mode for Emacs) は Emacs 向けの強力な開発環境です。
- 特徴: REPL、統合デバッグ、インタラクティブな評価を実装しています。
- アーキテクチャ: Swank TCP サーバーと通信して動作します。
Vim: Slimv/Vlime
Vim 版の SLIME は以下の二つが代表的です。どちらも Swank サーバーを起動することで動作します。
- Slimv: 「Superior Lisp Interaction Mode for Vim」。2009 年リリース(Tamas Kovacs)。Swank をバンドルしており、一部改変したバージョンを使用します。
- Vlime: 2017 年リリース(Kay Z)。Slimv よりも新しくて若いです。Swank サーバー自体はバンドルせず、自動ダウンロード用ラッパーのみ提供します。
Vim プラグインの管理方法
-
インストール先の推奨 (Vim 8):
- Vim 8 ではネイティブのパッケージサポートがあります。
- 各プラグインを
にコピーすれば自動的にロードされます。~/.vim/pack/plugins/start/ - デフォルトのディレクトリ名は任意です。
-
Vlime の注意点:
- Vlime のトップレベルディレクトリ構造が Vim パッケージに準拠していません。
- そのため、本稿では古式に従い
にコピーし、~/.vim/bundle
オプションを明示的に設定する方法を推奨します。runtimepath
ソフトウェアバージョン
以下のバージョン環境で検証されています(将来の互換性は保証されません):
- OS: Debian GNU/Linux 10.1 (buster)
- Vim: 8.1
- Slimv: Git リポジトリ 47a0070
- Vlime: Git リポジトリ 065b95f
- Paredit: Git リポジトリ d99905a
- Rainbow Parentheses: Git リポジトリ 27e7cd7
- Common Lisp 実装: SBCL, CLISP, ECL, MIT/GNU Scheme, Clojure
- その他: Quicklisp (beta), tmux
注意: Quicklisp はベータ版です。最新のインストール手順は公式ドキュメントをご確認ください。
はじめ方
Slimv と SBCL で始める
-
環境構築コマンド:
sudo apt-get install vim-nox sbcl tmux git
を使用します(Python インターフェースが必要です)。vim-nox
でも動作しますが、軽量なためvim-gtk
が推奨されます。vim-nox
-
tmux の準備:
- Slimv は tmux/GNU Screen/デスクトップ環境内なら Swank サーバーを自動起動します。
- tmux を使用する場合:
tmux - 使用しない場合は、Swank サーバーを手動起動が必要です。
-
Slimv のインストール:
git clone https://github.com/kovisoft/slimv.git ~/.vim/pack/plugins/start/slimv vim +'helptags ~/.vim/pack/plugins/start/slimv/doc' +q -
Swank サーバーの起動:
- tmux などを使用している場合:自動起動されます。
- 使用していない場合(手動):
sbcl --load ~/.vim/pack/plugins/start/slimv/slime/start-swank.lisp
-
開発環境への接続:
でファイルを開きます。vim foo.lisp- Vim ノーマルモードで
を入力します(Swank への接続)。,c
-
開始と評価:
- REPL が起動します (
)。CL-USER> - コードを入力し、
で現在の式を評価します。,e - レベル:カーソル下の式のリーダーキーは
です(,
で確認可)。:echo g:slimv_leader
- REPL が起動します (
Vlime と SBCL で始める
-
環境構築コマンド:
sudo apt-get install vim sbcl git curl- Vlime は Python インターフェースの Vim (
など) でも動作します。vim-basic
- Vlime は Python インターフェースの Vim (
-
Quicklisp のインストール: Vlime は Quicklisp を依存しています。
curl -O https://beta.quicklisp.org/quicklisp.lisp sbcl --load quicklisp.lisp --eval '(quicklisp-quickstart:install)' --eval '(exit)' sbcl --load ~/quicklisp/setup.lisp --eval '(ql:add-to-init-file)' --eval '(exit)' -
Vlime と Paredit のインストール: Vlime は Paredit をバンドルしていないため、別でインストールします。
git clone https://github.com/l04m33/vlime.git ~/.vim/bundle/vlime git clone https://github.com/kovisoft/paredit ~/.vim/pack/plugins/start/paredit echo 'set runtimepath^=~/.vim/bundle/vlime/vim' >> ~/.vimrc vim +'helptags ~/.vim/bundle/vlime/vim/doc' +'helptags ~/.vim/pack/plugins/start/paredit/doc' +q -
Swank サーバーへの接続:
- Vim ノーマルモードで
を入力します(Vlime サーバーの自動起動・接続)。\rr
がバックスラッシュ<LocalLeader>
のままの場合です。\
- Vim ノーマルモードで
-
評価と REPL:
- Vlime の REPL ウィンドウはデフォルトで「不可編集 (
)」なので、直接コード入力ができません。nomodifiable - インタラクションモードを有効化:
を入力して切り替え可能(Enter キーで評価)。\i
- Vlime の REPL ウィンドウはデフォルトで「不可編集 (
Paredit で始める
Paredit は括弧の自動補完や構造化編集を行います。
- 特徴: 開中括弧
を打つと自動的に閉じ中括弧(
を挿入します。) - 電気的リターン (Electric Return): Enter キーを押すと、Paredit は括弧のバランスを整えながら改行を追加します(2 スペースインデント)。
- 操作例:
- 開中括弧の削除禁止:リストが空でない場合は閉じ中括弧を削除しません。
- 式の外に
を打ち、カーソルを移動させるなど、S-式の編集が容易になります。>
- リーダーキー:
です(,
で確認可)。:echo g:paredit_leader
デバッガとインスペクタの使用
エラー発生時に SLDB (Slime Debugger) が起動し、バックトレースやリスタート(中止、試す)が表示されます。
Slimv でのデバッガーとインスペクタの利用
- ワークフロー:
- エラーが発生すると分割ウィンドウにバックトレース (
) が表示されます。SLDB - バックトレースの行で
キーを押すと詳細情報が展開され、変数の値を確認できます(Enter
でインスペクタ呼び出し)。,i - インスペクタでは Enter キーで深く掘り下げ、Backspace キーで戻る (
で終了)。q - リスタートを選択して処理を続行または中止します (
またはa
で中止へ戻り可能)。,a
- エラーが発生すると分割ウィンドウにバックトレース (
Vlime でのデバッガとインスペクタの利用
- ワークフロー:
- エラー発生時に SLDB が起動。
- バックトレースの行で
キーを押すと詳細情報が表示されます(分割ウィンドウ)。Enter - インспекタを呼び出すには挿入モード (
) に切り替えて変数名を入力し、Enter キーを押します。i - Enter キーで深く掘り下げ、Backspace で戻る、
で閉じる。:q - リスタートを選択(中止:
)。トップレベルへの直接コマンドはありません。a
関数のトレース機能
Slimv での関数トレース
- 手順:
- 関数名の上部で
を入力してトレースをトグルします。,t
(またはctrl+d
) でトップレベル形式を評価すると、呼び出し結果が REPL に出力されます(入出力のペアが表示)。,d
- 関数名の上部で
Vlime での関数トレース
- 設定:
に~/.vimrc
のロードを含める必要があり、Vlime コネクション初期化時に Swank contrib モジュールを追加する必要があります。SWANK-TRACE-DIALOG - 手順:
でトレースダイアログを表示。\TD- ソースコードウィンドウに戻る (
)。ctrl + w w - 関数名上部で
でトレースをトグル。\TT - 形式評価後に
を実行。\st - 結果は分割ウィンドウに表示され、Enter キーで折り返しを開く (
) や FETCH (zo
) が可能です。[fetch next batch]
おもちゃのような便利機能 (Nifty Features)
トップレベル式の評価
- Slimv:
でトップレベル式を評価(カーソル位置)。,d - Vlime:
でトップレベル式を評価。\st
ラインボウ・パーレンセズ (Rainbow Parentheses)
- Slimv:
に~/.vimrc
を追加で有効化(デフォルト OFF)。let g:lisp_rainbow=1 - Vlime: 標準機能なし。独立したプラグイン(
)をインストールする必要があります。rainbow_parentheses.vim
アーグメントリスト
- Slimv: ステータス行またはメッセージエリアに表示されます。
- Vlime: 上の分割ウィンドウに表示されます(追加のウィンドウが必要)。
オムニ補完
- 両方とも機能します(
またはTab
で選択)。デフォルトでフュージー(不完全一致)動作です。ctrl+n/p
シボル記述 (Documentation)
- Slimv:
キーでカーソル下のシンボルに関する情報を Vim メッセージエリアに表示(Common Lisp/Clojureのみ)。Scheme は非対応。,s - Vlime:
キーで情報画面を分割ウィンドウに表示します。\da
マクロ展開
- Slimv:
で一度だけ展開、,1
で完全に展開(Macroline 解除)。,m - Vlime:
で一度だけ展開、\m1
で完全に展開。\ma
クロス参照 (Cross-referencing)
- Slimv:
で関数の呼び出しリストを REPL バッファに表示しますが、直接ジャンプする機能はありません。,xl - Vlime:
で xref バッファを作成し、Enter キーで直接呼び出し元にジャンプできます。\xc
他の Common Lisp 実装
SBCL 以外の実装でも動作します(SBCL は最も安定)。CLISP や ECL でもサポートされていますが、一部の機能やエラー挙動に注意が必要です。
CLISP での Slimv の使用
を CLISP でロードします。~/.vim/pack/plugins/start/slimv/slime/start-swank.lisp- GNU Screen/tmux/デスクトップ環境を使用すると自動検出・起動可能です。
が必要です(Paredit 機能含む)。vim-nox
ECL での Slimv の使用
- SWANK サーバーを ECL で開始するコマンドに、Swank 用のロードファイルを指定します。
- 注意: ECL は Swank サーバーの起動に時間がかかることがあります。Slimv ndefault タイムアウト(20 秒)が短いため、
というエラーが出る可能性があります。ECL がコンパイルを完了するまで待つ必要があります。SWANK server is not running.
CLISP での Vlime の使用
- Vlime は
に CLISP 用のビルドコマンド関数 (~/.vimrc
) を定義する必要があります。VlimeBuildServerCommandFor_clisp - 注意: SWANK サーバー起動時に SOCKET-STATUS エラーが出る場合がありますが、接続自体は確立されることがあります(このエラーは無視可)。
ECL での Vlime の使用
に ECL 用のビルドコマンド関数 (~/.vimrc
) を定義します。VlimeBuildServerCommandFor_ecl- 他の CLISP と同様の注意点があります。
他の Lisp 方言
Vlime は Common Lisp のみサポートしています。Slimv が Scheme と Clojure をサポートします。
MIT/GNU Scheme での Slimv の使用
- 要件: Linux 環境が必要(macOS では動作しない可能性があります)。MIT/GNU Scheme バージョン 9.x が必要です。
- 設定:
を使用して Swank サーバーを起動します。slime/contrib/swank-mit-scheme.scm - 手順: MIT/GNU Scheme インストール後、tmux 内で自動起動または手動 (
) で開始し、Vim でscheme --load ...
を入力します。,c
Clojure で Slimv の使用
- 要件:
がスキャン可能です(デフォルトclojure.jar
など)。Maven 等を使ってビルド/インストールするのが確実です。/usr/local/bin/* - 設定: Vlime と同様に Swank サーバーの起動方法をカスタマイズする必要があります(Java と Clojure の組み合わせを指定)。
java -cp "$HOME/clojure/clojure.jar:$SWANK_DIR" clojure.main -i "$SWANK_DIR/swank/swank.clj" ...
Slimv と Vlime の比較
| 特徴 | Slimv | Vlime |
|---|---|---|
| ディレクトリ構造 | Vim パッケージ標準準拠(簡単) | 非準拠( 設定が必要) |
| Python インターフェース | 必須 ( など) | 不要 ( でも OK) |
| 自動起動環境 | tmux/Screen/デスクトップ必須 (それなしは手動) | tmux/Screen 不要(独自サーバー) |
| Quicklisp 依存 | 不要(コードバンドル済み) | 必須 |
| Paredit | バンドル済み | 別でインストール必要 |
| REPL インタラクティブ性 | 可能(直接入力 OK) | 不可( 設定あり)* |
| 電気的リターン | 機能正常 | 機能しない(Enter キーはリスト表示のみ) |
| UI 表示エリア | ステータス行/メッセージエリア 結果:REPL 内 | 分割ウィンドウ追加 |
| 言語サポート | Common Lisp, Scheme, Clojure | Common Lisp のみ |
*Vlime は REPL を不可編集にしています。インタラクションモード (
) を有効化することで補完できます。\i
その他の詳細比較
- ラインボウ・パーレンセズ: Slimv 標準機能で対応可能。Vlime ではプラグイン追加が必要。
- クロス参照: Slimv は REPL リスト表示のみ。Vlime は xref バッファ経由で直接移動可能。
簡易的な推奨
Slimv を推奨します。
- 理由:
- より長期間の歴史があり、安定しています。
- Common Lisp, Scheme, Clojure と多様な実装をサポート。
- デフォルトのキーバインドが直感的で便利です。
- インタラクティブな REPL を標準で提供(大きな利点)。
ただし、Vlime の独自機能や環境に合わせて検討することも可能です。まずは自分で試して好みのものを見つけてください。
免責事項 (Disclosure)
著者 Susam Pal は執筆中に Slimv に以下の 4 つのバグを発見し、即時修正しました:
- Issue #87, #88, #89, #90
参考文献
- Couple of Emacs hacks
- Vim 8.0 Released
- Slimv Tutorial
- A Tutorial for Vlime