2010-11-16 62 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