Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-04-27

SLIME勉強会@新宿 4/26 (土) 13:00〜20:00 (2)

| 03:32 | SLIME勉強会@新宿 4/26 (土) 13:00〜20:00 (2) - わだばLisperになる を含むブックマーク はてなブックマーク - SLIME勉強会@新宿 4/26 (土) 13:00〜20:00 (2) - わだばLisperになる

SLIMEを使う

便利機能紹介

ここで紹介している機能のEMACSでの基本キーバインドに関しては、tszさんが分かりやすい一覧表で纏められていますので、そちらも参照して下さい!

式の評価

slime-pprint-eval-last-expression

C-c C-p便利。これを基本に使っても良いかも。

C-c C-cでコンパイル。

コンパイルしてエラーの個所を表示してくれる。

エラーになっている個所が色付きのアンダーラインで表示される。

M-n、M-pでソースファイルの該当個所場所に飛べるので便利!

マクロ展開

非常に便利なので、本当にお勧め。これの支援が無いとマクロが書けなくなる位、便利。

SLIME上では(macroexpand ...)と書く必要はないのだ!

  • 全部展開する

C-c M-m

関数定義のソースコードに飛ぶ

M-.でソースへ

M-,でもどる

という風にどんどん進める

処理系が対応している必要あり (SBCL、Clozure等は対応している)

関数名補完

c-p-c、Fuzzy(C-c M-i)方式等いろいろある。

c-p-cは、m-v-bi→multiple-value-bindと補完。ハイフンを入力する必要あり。

Fuzzyはなんとなくの感じから展開mvbind(C-c M-i)→multiple-value-bind等々

REPLの履歴

Bashのように履歴が辿れる。

REPL上で、M-n、M-p。M-rもある。Eshellっぽいキーバインド。

読み込み不可オブジェクトをREPLで読み込める

読み込めない筈の#<foo>等もよみこめる。主に対話操作で便利。

SLIME Fancyが読み込まれている必要ありかも。

複数の処理系を切り換えて使える。

C- - M-x slimeで切り換えられる。(slime-connectでない場合)

複数の処理系を同時起動可能。しかし、編集しているLISPファイルをどの処理系が担当しているのか把握できなくなることが多いので、あまりお勧めできないかも。

パッケージの移動とソースファイルとのシンクロ

C-c ~でソースファイルとソースファイルが指定しているパッケージを同期できる。

←割とファイルを開いた段階で自動で内容をみて判別してくれるのでは?(tsz)

←そういえば、そうかもしれませんね(笑) どういう時に使うんだろう…。自分は割と手癖で打ち込んでます(g000001)

ファイルのロード、コンパイル

C-c C-lでファイルのロードC-c C-kで、コンパイルしてからロード

ASDFのロード load-systems

asdf-installはないが、 (asdf:oos ~)はSLIMEから可能。

M-x slime-load-system

と打ち込んで、パッケージを選択。パッケージ名は補完が効く。

SLIME上で(asdf:oos ...)と打つ必要はないのだ!。

HyperSpecとの連携

非常に便利で、必須な機能。(C-c C-d h)

憶えるのが厄介な、FORMATの指示子を引くこともできる! (C-c C-d ~)

Cltl2も引きたい→ILISPにcltl2.elがあるんで、引き抜いてきてロードすれば使えます。

(eval-after-load "cltl2"
  (progn 
    (require 'cltl2)
    ;; SLIMEっぽく、slime-cltl2-lookupという名前のエイリアスを作成
    (defalias 'slime-cltl2-lookup 'cltl2-lookup)
    ;;ドキュメントの場所
    (setq cltl2-root-url "http://foo.local/docs/cltl/")))
バッファ間の移動など(slime-selector活用)

M-x slime-selectorでSLIMEを操作する上で便利なslime-selectorが起動。

割と頻繁うので、

(global-set-key [(control ?\;)] 'slime-selector)

等に便利な場所に割り当てると良いかも。

slime-selectorで切り換えられるもの

キー名前説明
?Selector help buffer.ヘルプ
cSLIME connections buffer.接続状況が確認できる。接続表示の上でkを押すことにより切断可能
d*sldb* buffer for the current connection.*sbdb*のバッファ
emost recently visited emacs-lisp-mode buffer.直近のelispバッファへ移動
iinferior-lisp* buffer.*inferior-lisp* bufferへ移動
lmost recently visited lisp-mode buffer.直近のlispバッファへ移動
rSLIME Read-Eval-Print-Loop.REPLへ移動
s *slime-scratch* buffer.emacsや、xyzzyの*scratch*のような感じで、式をC-jすると後に結果の文字が挿入されるのバッファ。*scratch*が好きな人にはおすすめ。
tSLIME threads buffer.スレッド別に表示される。選択してC-kを押すことでスレッドを終了できる。
v *slime-events* buffer.クライアントとサーバの通信の様子がみれる
インスペクタ

(C-c I)でオブジェクトをいろいろ調べられる

パッケージの場合、内容を確認できるのが便利。エクスポートされている関数一覧など見れる。

SLIME Fancyが読み込まれていないと、綺麗に表示されない?

デバッガ

tで詳細表示にトグル

M-n、M-pでソースと対応づけられながら進めることが可能。

内部で式の評価をすることも可能。

クロスリファレンス

(C-c >)、(C-c <)呼んでいる関数、呼ばれている関数を調べる。一覧も表示される。

プロファイリング

slime-toggle-profile-fdefinition

TRACEのように任意の関数を指定してプロファイリング。

結果表示で結果表示。呼ばれた回数等が表示される。

全部のプロファイリングを中止。

  • slime-profiled-functions

プロファイリング中の関数の一覧を表示

全部のコッカを閉じる(過不足なく)

slime-close-all-parens-in-sexp(C-c C-])

式をコメントアウト/復帰 slime-balanced-comment

slime-insert-balanced-commentsでコメントアウト

(do ((i 0 (1+ i)))
    ((= 10 i) (p__rint "foo?")))

;; コメントアウトしたい式の先頭で、slime-insert-balanced-comments
;; →
(do ((i 0 (1+ i)))
    ((= 10 i) #|(print "foo?")|#))

;; slime-remove-balanced-commentsで復帰
;; →
(do ((i 0 (1+ i)))
    ((= 10 i) (p__rint "foo?")))
;; 楽ちんだ!

slime-remove-balanced-commentsで復帰

(define-key slime-mode-map [(control ?c) ?\;] 'slime-insert-balanced-comments)
(define-key slime-mode-map [(control ?c) (meta ?\;)] 'slime-remove-balanced-comments)

等々を.emacsへ…。

引数の補完、便利なのか微妙

C-c C-sでずらっと補完。(map __ ) → (map result-type function first-sequence more-sequences...)

ディスアセンブル

(C-c M-d)

SLIME上では(disassemble ...)と書く必要はないのだ!

トレース

(C-c C-t)で指定した関数をTRACEしたりしてくれる。SLIME上では(trace ...)と書く必要はないのだ!

関数定義の取り消し

(C-c C-u) slime-undefine-function

SLIME上では(fmakunbound ...)と書く必要はないのだ!。まあ、そこまで便利でもないけど(笑)

参考資料等

SLIMEでどういうことができるかを解説した良いムービーがある。

Marco Baringer氏がSLIMEの一通りの使い方を解説してくれる、1時間程度のムービー。

まずは、これを一回観るのが手っ取り早い?