如何让emacs缩进其他东西,比如缩进定义?

pkn*_*dle 6 emacs scheme racket

所以Emacs非常擅长编辑Scheme/Racket/Lisp代码.它做的一件好事是当你输入如下代码:

(define (make-position-table)
  (for/list ([i (in-range 256)])
            `()))
Run Code Online (Sandbox Code Playgroud)

它做了一个非常聪明的事情并将第二行缩进到两列.现在第三行它完成了它对所有lisp代码所做的工作以及用于对齐所有参数的缩进.

如何自定义Emacs以使其缩进第三行,就像我引入一个新主体一样.我想要的是:

(define (make-position-table)
  (for/list ([i (in-range 256)])
    `()))
Run Code Online (Sandbox Code Playgroud)

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

Eli*_*lay 7

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

(put 'for/list 'scheme-indent-function 1)
Run Code Online (Sandbox Code Playgroud)

另请参阅一个黑客版的方案模式,它可以执行更多的racket-isms.


Por*_*lus 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*))
Run Code Online (Sandbox Code Playgroud)

从我参与PLT计划的那些日子开始.