@kyanny's blog

My life. Opinions are my own.

SLIME memo

SLIME: The Superior Lisp Interaction Mode for Emacs の設定や使い方のメモ。

SLIME の起動

M-x slime

SLIME の終了

M-x slime-quit-lisp

または

CL-USER> ,quit

実際には , 打つと Command: と入力待ちになるので quit する

チュートリアル

http://www.guba.com/watch/3000054867

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) くらいでみても面白い。