SLIME - lisp-cookbook-ja/common-lisp GitHub Wiki

開発環境 SLIME


概説

SLIME(The Superior Lisp Interaction Mode for Emacs)は、EmacsのCommon Lisp開発環境です。

  • lisp-modeを強化するマイナーモードのslime-mode
  • Emacsのユーザインターフェースを利用したデバッガのSLDB
  • Emacs Lispで書かれたREPL
  • 対話的なオブジェクトインスペクタ

などが含まれます。


$$toc



動画

紹介動画があります。百聞は一見にしかず、ですから、SLIMEが実際にどういったものか知りたいなら、見てみると良いでしょう。


インストール

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などを入力すると、その処理系が起動します。なお、補完もできますので、処理系を何という名前で設定したか忘れても心配いりません。