2010-11-16 64 views
6

因此,Emacs在编辑Scheme/Racket/Lisp代码方面非常出色。它所做的一件好事是当你键入如下代码:如何让emacs缩进缩进定义的其他东西?

(define (make-position-table) 
    (for/list ([i (in-range 256)]) 
      `())) 

它做了一件非常聪明的事情,并将第二行缩进两列。现在,第三行对所有参数进行对齐的所有lisp代码和缩进都做了什么。

如何定制Emacs,使其缩进第三行,就好像我正在引入一个新的主体。我想的是:

(define (make-position-table) 
    (for/list ([i (in-range 256)]) 
    `())) 

我猜这是可能的,我只是还没有想出了神秘的Emacs变量来设置。有谁知道如何做到这一点?

回答

7

您可以添加到您的.emacs文件:

(put 'for/list 'scheme-indent-function 1) 

也看到了hacked version of scheme mode,做更多的球拍主义。

+0

甜美!谢谢。这正是我一直在寻找的! – pknodle 2010-11-17 00:55:14

+0

谢谢!这对pmatch很有用。 – tcdowney 2013-01-26 19:17:26

5

我相信(put 'for/list 'scheme-indent-function 'defun)应该做你想做的。

重复其他符号。我的.emacs包括

(mapc (lambda (sym) (put sym 'scheme-indent-function 'defun)) 
     (list 'for 'for/list 'for/and 'for/or 
      'match 'case 'syntax-parse 'test-suite 'test-case 
      'define-syntax-rule 'match-let 'match-let*)) 

从我涉足PLT计划的日子开始。

+0

谢谢。这非常方便。 – pknodle 2010-11-17 00:56:22

+0

使用'defun'与'1'不同:在关键字后面尝试一个换行符,你会看到它是如何工作的。 (另外,Racket有'for/fold'这样的东西有两种特殊形式。) – 2010-11-17 01:11:12