SLIME: The Superior Lisp Interaction Mode for Emacs の設定や使い方のメモ。
インストールと初期設定
MacPorts で SLIME をインストール - 刺身☆ブーメランのはてなダイアリー
MacPorts で Hyperspec をインストール - 刺身☆ブーメランのはてなダイアリー
SLIME の起動
M-x slime
SLIME の終了
M-x slime-quit-lisp
または
CL-USER> ,quit
実際には , 打つと Command: と入力待ちになるので quit する
SLIME の関数とキーバインド
slime-describe-symbol
C-c C-d d C-c C-d C-d
slime-documentation-lookup
C-c -d h
なんかローカルに Hyperspec ファイル一式を用意してないとブラウザで Hyperspec のページを開くらしい
slime-eval-defun
C-M-x
カーソル位置の近くの S 式を評価してミニバッファに表示してくれる。どういう原理で対象が選ばれてるのかよくわからない。 Emacs のバッファ内で実行するので間違って Emacs Lisp の式を実行してエラーになって悩んだりしないように(実際に S 式を評価するのは Common Lisp 実装なので)
slime-eval-last-expression
C-x C-e
まぁ *scratch* とかでやるのと同じな。
slime-selector
M-x slime-selector
SLIME が使ってるいろんなバッファを切り替えられる。 F12 が Help になってたらそれで呼べそうな。 ? でこれのヘルプ。使うのは r で slime-repl へ切り替えくらい? あと l が most recently visited lisp-mode buffer. でこれはべんりかも
slime-compile-defun
C-c C-c
カーソル位置の関数をコンパイル。どういうことかよくわかってない。実行速度が速くなるのかなと思ってフィボナッチ数を求める関数を書いてコンパイル前後で時間を計測したけどあんま差がなかった。 prefix argument C-u M-- の有無で最適化方法がかわるらしい。
slime-compile-and-load-file
C-c C-k
コンパイルして REPL にロード。コンパイルしたファイルは元々編集してたファイルと同じディレクトリ内に hello.fasl とか作られる(SBCL の場合)
sldb-show-source
v (デバッガのなかで)
エラー時にデバッガが立ち上がって n,p でスタックトレースをたどれる。そこで v 押すとその時点で実行してた関数のソースの行にジャンプして別バッファで表示してくれる。これはべんり。
slime-toggle-trace-fdefinition
C-c C-t
これで関数をトレースすると REPL で実行したときにぞろぞろとトレースログが流れる。 (fibonacci 10) くらいでみても面白い。