7

我将 Emacs 的 Clojure 模式与 SLIME 和 swank-clojure 一起使用。我对缩进有疑问。大多数时候缩进做我想要的:当我按 TAB 时,它会缩进 2 个空格。但是,例如,在代理的情况下,我使用 TAB 得到的缩进很大:10 个空格。例子:

(defn- create-frame []
  (let [frame (JFrame. "Hello Swing")
        button (JButton. "Click Me")]
    (.addActionListener button
              (proxy [ActionListener] []
                        (actionPerformed [evt]

...

代理方法也是如此,例如上面的 actionPerformed。

此设置在哪里,如何更改?据我了解,这一定是 Clojure 模式的问题。

4

2 回答 2

15

Clojure 缩进基于 lisp 缩进,除非另有说明,否则缩进第二行以与函数的第一个参数对齐。以下行在上一行下缩进(假设嵌套没有变化)。

例如

(some-function arg1 arg2 arg3
               arg4-on-second-line)

或者,当第一个参数在第二行时:

(some-function
 arg1
 arg2
 arg3 ...)

但是,如果您修改变量lisp-indent-offset,这将覆盖上面解释的缩进方案,并强制第二行表达式缩进lisp-indent-offset比函数调用的开头更多的列。

因此,也许以下内容会为您提供所需的缩进:

(setq lisp-indent-offset 2)
于 2009-06-08T17:42:30.203 回答
9

clojure 模式中有“始终 2 个空格”选项。您可以通过在或中添加以下行来设置它。.emacsinit.el

(setq clojure-defun-style-default-indent t)
于 2014-01-05T23:14:35.953 回答