SLIME - lisp-cookbook-ja/common-lisp GitHub Wiki
概説
SLIME(The Superior Lisp Interaction Mode for Emacs)は、EmacsのCommon Lisp開発環境です。
- lisp-modeを強化するマイナーモードのslime-mode
- Emacsのユーザインターフェースを利用したデバッガのSLDB
- Emacs Lispで書かれたREPL
- 対話的なオブジェクトインスペクタ
などが含まれます。
動画
紹介動画があります。百聞は一見にしかず、ですから、SLIMEが実際にどういったものか知りたいなら、見てみると良いでしょう。
- slime.mov(英語)
- SLIME on Linux(英語)
インストール
UNIX系OS
SLIMEをダウンロードします。ウェブサイトから、CVSスナップショットをダウンロードするのが簡単です。
cd ~/opt
wget http://common-lisp.net/project/slime/snapshots/slime-current.tgz
tar xfz slime-current.tgz
CVSで最新のコードをチェックアウトしても構いません。
cd ~/opt
cvs -d :pserver:anonymous:[email protected]:/project/slime/cvsroot co slime
好きな場所に展開、あるいはチェックアウトしてください。頻繁に新しいバージョンに更新するつもりなら、権限の関係上、自分のホームディレクトリの下に置くと良いでしょう。
Windows
SLIMEをダウンロードして展開し、フォルダごとEmacsのsite-lispフォルダにコピーします。
Emacsの設定
.emacsに設定を追加します。
;; Lisp処理系のコマンド
(setq inferior-lisp-program "sbcl")
;; SLIMEがある場所をEmacsのロードパスに追加
(add-to-list 'load-path "~/opt/slime")
;; SLIMEを実行するときに自動的にロードさせる
(require 'slime-autoloads)
;; どのcontribパッケージを読み込むかの設定
(slime-setup)
設定
文字コード
SLIMEが処理系と通信するときに使うエンコーディングを、slime-net-coding-systemで設定できます。処理系との間で設定に食い違いがあると、日本語を正しく扱えません。
(setq slime-net-coding-system 'utf-8-unix)
SLIMEとSKKとの衝突を回避する設定
特定の場面で、SLIMEとSKKとの間でスペースキーのキーバインドが競合して、SKKでの変換ができなくなります。
(defun my-slime-space (n)
(interactive "p")
(if (and (boundp 'skk-henkan-mode) skk-henkan-mode)
(skk-insert n)
(slime-space n)))
(define-key slime-mode-map " " 'my-slime-space)
自分の環境(Emacs 23~24 CVS版SLIME)では特に対策しなくても問題なく動作するようです --g000001
llibra(2010/12/05 10:47:34 JST): Emacs 23.2、SKK 14.1.50、SLIME 2010-10-09でもこのkludgeなしで動作するみたいです。以前、漢字変換できなかったときは、SKKのバージョンが古かったので、その後修正があったのかもしれません。
llibra(2010/12/08 22:16:35 JST): 訂正。同環境でlisp-modeのバッファでやっぱりコンフリクトしている模様。
SLIMEのREPLを特定のパッケージに入った状態で起動する
SLIMEのREPLは、通常、common-lisp-user(cl-user)パッケージに入った状態で起動しますが、slime-connected-hookにフックを仕掛け、slime-repl-set-packageでパッケージを切り替えることで、好きなパッケージに入った状態で起動できます。
(add-hook 'slime-connected-hook
(lambda ()
(slime-repl-set-package ":foo")))
起動する処理系を簡単に切り替えられるようにする
SLIMEでは、事前に設定をしておくことで、起動する処理系を簡単に切り替えることができます。
(setq slime-lisp-implementations `((sbcl ("sbcl"))
(clisp ("clisp"))
(ecl ("c:/MinGW/msys/1.0/bin/bash" "-c" "c:/ecl/ecl.exe"))))
のように設定します。設定後にM-- M-x slimeを実行すると、ミニバッファに、
Lisp name:
と入力を促すプロンプトが表示されます。ここで、先ほど設定したsbclやclispなどを入力すると、その処理系が起動します。なお、補完もできますので、処理系を何という名前で設定したか忘れても心配いりません。