SLIME:slime-indentation

SLIME:slime-indentation

Tag: SLIME

Emacsに付属するcl-indent.elの機能を拡張したSLIMEのcontribモジュールです。インデントのスタイルを定義でき、common-lisp-set-styleコマンドで切り替えられるようになっています。



設定

slime-indentationを有効にするには、slime-setupにslime-indentationを指定します。

(slime-setup '(slime-fancy slime-indentation))

のようなEmacs Lispコードを評価するとロードされます。.emacsに書いておけば良いでしょう。


スタイルの切り替え

common-lisp-set-styleコマンドを利用します。M-x common-lisp-set-styleすると

Specify Common Lisp indentation style: 

というプロンプトがEmacsのミニバッファに表示されるので、スタイルの名前を指定します。


定義済みのスタイル

basic

すべてのオプションをデフォルトに設定するスタイル。

classic

1995年当時のcl-indent.elをエミュレートするスタイル。ifのthen部とelse部のインデントがスペース2個分になり、caseの各clauseのbody部がkey部よりスペース2個分深くインデントされる。

modern

汎用的なスタイル。ラムダリストのキーワードとキーワードパラメータを揃え、loopのsubclauseのインデントをしない。

sbcl

Steel Bank Common Lispのソースコードで使われているスタイル。modernスタイルをベースに、SBCL固有の構文への対応、タブによるインデントの禁止、78桁での折り返し、whitespace-modeによるタブと連続するスペースの可視化をする。


インデント例

ラムダリスト

;; basic
(lambda (x y &optional z
         &key a b
           c
         &rest rest)
  t)

;; modern, sbcl
(lambda (x y &optional z
             &key a b
                  c
             &rest rest)
  t)

;; classic
(lambda (x y &optional z
         &key a b
         c
         &rest rest)
  t)

if

;; basic, modern, sbcl
(if (atom t)
    t
    nil)

;; classic
(if (atom t)
  t
  nil)

case

;; basic, modern, sbcl
(case x
  ((1 3 5 7 9)
   :odd)
  ((0 2 4 6 8)
   :even))

;; classic
(case x
  ((1 3 5 7 9)
     :odd)
  ((0 2 4 6 8)
     :even))

loop

;; basic, classic
(loop for i
        from 0
          below 10
      collect i)

;; modern, sbcl
(loop for i
      from 0
      below 10
      collect i)

参考資料


Last modified : 2012/01/02 23:54:14 JST
CC0 1.0
Powerd by WiLiKi 0.6.1 on Gauche 0.9