SLIMEとは
SLIMEは(Common) Lispのための統合開発環境(IDE)です。他のIDEとは異なり、 対話的にプログラムを構築できるのが特徴です。一度ハマれば他の開発環境は 使えなくなるでしょう。詳しい情報は次のURLを参照してください。http://common-lisp.net/project/slime/
インストールと設定
SLIME
SLIMEのCVSスナップショット(本家推奨)をインストールします。OSは GNU/LinuxやMac OS XなどのUNIX系OSを想定しています。$ wget http://common-lisp.net/project/slime/snapshots/slime-current.tgz
$ tar xvzf slime-current.tgz
$ mv slime-* ~/.emacs.d/slime
展開したディレクトリはslime-2011-04-07
のような名前になりますが、ここ ではslime
という名前で~/.emacs.d/
直下に移動します。次にEmacsの設定を行います。次のコードを
~/.emacs
に書いてください。;; Clozure CLをデフォルトのCommon Lisp処理系に設定
(setq inferior-lisp-program "ccl")
;; ~/.emacs.d/slimeをload-pathに追加
(add-to-list 'load-path (expand-file-name "~/.emacs.d/slime"))
;; SLIMEのロード
(require 'slime)
(slime-setup '(slime-repl slime-fancy slime-banner slime-indentation))
これで基本的な設定は完了です。2011/7/10追記
若干設定項目が足りなかったので補足します。
;; SLIMEからの入力をUTF-8に設定
(setq slime-net-coding-system 'utf-8-unix)
2013/09/20追記slime-indentation
を追加しました。これで後述のcl-indent-patchesの設定は不要です。popwin.el
使い始めれば気付くと思いますが、SLIMEは事あるごとにEmacsのウィンドウを 分割したり、他のウィンドウのバッファを切り替えたりします。これではせっ かくの優れた開発環境も台無しです。そこで、拙作のpopwin.elをインストール することをお勧めします。popwin.elはウィンドウの分割等を極力抑制し、プロ グラマが快適に作業することを助けてくれる優れものです。インストール方法や使い方は次のURLを参照してください。
http://d.hatena.ne.jp/m2ym/20110120/1295524932
インストールが完了したら次のコードを
~/.emacs
に書いてください。;; Apropos
(push '("*slime-apropos*") popwin:special-display-config)
;; Macroexpand
(push '("*slime-macroexpansion*") popwin:special-display-config)
;; Help
(push '("*slime-description*") popwin:special-display-config)
;; Compilation
(push '("*slime-compilation*" :noselect t) popwin:special-display-config)
;; Cross-reference
(push '("*slime-xref*") popwin:special-display-config)
;; Debugger
(push '(sldb-mode :stick t) popwin:special-display-config)
;; REPL
(push '(slime-repl-mode) popwin:special-display-config)
;; Connections
(push '(slime-connection-list-mode) popwin:special-display-config)
ac-slime
ac-slimeはauto-complete.elのSLIME拡張です。SLIME(SWANKサーバー)の情報を 利用するため、非常に高精度のコード補完が行えます。ac-slimeは次のURLから入手できます。
https://github.com/purcell/ac-slime
なおauto-complete.elをあらかじめインストールしておく必要があります。イ ンストールしていない方は次のURLを参照してください。
http://cx4a.org/software/auto-complete/index.ja.html
ac-slimeをインストールするには、先のURLからac-slime.elをダウンロードし、 load-pathの通ったディレクトリにコピーします。install-elispや auto-installがある場合は次のコードを評価することでインストールできます。
;; install-elisp
(install-elisp "https://github.com/purcell/ac-slime/raw/master/ac-slime.el")
;; auto-install
(auto-install-from-url "https://github.com/purcell/ac-slime/raw/master/ac-slime.el")
最後に~/.emacs
に次のコードを書いてインストール完了です。(require 'ac-slime)
(add-hook 'slime-mode-hook 'set-up-slime-ac)
(add-hook 'slime-repl-mode-hook 'set-up-slime-ac)
これで.lispファイルやREPLでauto-complete.elを使った自動コード補完が行え るようになりました。
cl-indent-patches.el
↓SLIMEに取り込まれたため、このcl-indent-patches.elの導入は不要です。(2013/09/20)
この節は2011/7/10に追記しました
Emacs標準のインデント機能には若干問題があります。特に
http://boinkor.net/lisp/cl-indent-patches.el
このファイルを
Emacs標準のインデント機能には若干問題があります。特に
loop
マクロのイン デントが変です。例えば次のようなインデントになってしまいます。(loop for x in lst
if (oddp x)
collect x)
本来は次のようにインデントされるべきです。(loop for x in lst
if (oddp x)
collect x)
このあたりに気をきかせてくれるのがcl-indent-patches.elです。次のURLから 入手できます。http://boinkor.net/lisp/cl-indent-patches.el
このファイルを
load-path
の通ったディレクトリに配置してください。後は .emacs
に次のような設定を書けばOKです。(when (require 'cl-indent-patches nil t)
;; emacs-lispのインデントと混同しないように
(setq lisp-indent-function
(lambda (&rest args)
(apply (if (memq major-mode '(emacs-lisp-mode lisp-interaction-mode))
'lisp-indent-function
'common-lisp-indent-function)
args))))
SLIMEの使い方
SLIMEの起動
インストールと設定が完了したらM-x slime
とやってみましょう。次のような 表示の*slime-repl ccl*
というREPLバッファが表示されれば成功です。CL-USER>
SLIMEを使って開発するに際して、まずやることはこのM-x slime
です。これ を行わなければ、後で説明するエディタコマンドやインデント、コード補完、 その他諸々が全く機能しません。まずM-x slime
、これだけ覚えておいてくだ さい。なお表示されたREPLバッファはちょっとした確認などを行ったりする場合を除 いて基本的には使用しません。
SLIMEの操作
SLIMEを起動して次にすることはlispファイルを開くことです。試しにfoo.lisp
などの適当なファイルを開いてください。lispファイルのメジャーモードは
lisp-mode
です。このモードには様々なキー が割り当てられていますが、今回はその中でも覚えておくべきキーバインドを 紹介します。
C-c C-c
C-c C-c
は現在ポイントしているトップレベルフォームをコンパイルします。 例えば次のような関数を編集しているとします。(defun f (a)
"Hello, World")
ここでC-c C-c
すると関数f
がコンパイルされます。実際にやってみれば分 かると思いますが、上の関数をコンパイルすると、SLIMEは変数a
が未使用で あると警告してくれます。もし警告があればそれを修正してC-c C-c
、という のが基本的な開発サイクルになります。
C-c C-k
C-c C-k
は現在のファイルをコンパイルしてロードします。トップレベルフォー ムを一つずつC-c C-c
するのが面倒なときに重宝します。また、C-c C-c
同 様、ソースコードに問題があれば警告してくれるので、ファイルの最終的な確 認にも利用できます。
C-c C-z
C-c C-z
は現在接続しているサーバーのREPLバッファを表示してくれます。何 か確認したいときや、前回紹介したQuicklispでライブラリをロードしたいとき にC-c C-z
します。例えばCL-TEST-MOREというライブラリをロードし忘れてい たとしたら、C-c C-z
でREPLバッファを表示して、次のように入力します。CL-USER> (ql:quickload :cl-test-more)
REPLは使いこなせば非常に強力なので是非活用してください。困った時
より本格的な開発サイクルは次回で説明しますが、SLIMEにおけるEmacsのC-g
的な存在としてM-x slime-restart-inferior-lisp
を紹介しておきます。これは現在接続しているサーバーを再起動してクリーンな状態に戻すコマンド です。SLIMEで開発していると、変にシンボルがインターンされたり、おかしな 値の変数ができたりします。また、正しく動作しているとしても、実は古い変 数などが残っていて偶然動作しているだけだったりもします。そういった状態 をリセットするのに
M-x slime-restart-inferior-lisp
は非常に便利です。是 非覚えておいてください。
0 件のコメント:
コメントを投稿