您的问题源于您将enter
重新弹回newline-and-indent
的事实,这在使用scala-mode
时似乎并不习惯。 newline-and-indent
最终呼叫indent-according-to-mode
,它检查一些不需要的设置,必要时在它们周围工作,如果一切正常,最后调用indent-line-function
,这是一个缓冲区局部变量。
由于这是模式特定的,所以模式定义了它们自己的indent-line-function
。多数有相当一致的行为,但Scala的功能是scala-indent-line
,在这里看到:
(defun scala-indent-line()
"Indent current line as smartly as possible.
When called repeatedly, indent each time one stop further on the right."
(interactive)
(if (or (eq last-command this-command)
(eq last-command 'scala-undent-line))
(scala-indent-line-to (+ (current-indentation) scala-mode-indent:step))
(let
((indentation (scala-indentation)))
(scala-indent-line-to indentation))))
关于这个有趣的是,它检测到重复调用,并进一步缩进,每次过来。当使用M-x时,last-command
不是scala-indent-line
,它是execute-extended-command
。所以,当使用M-x时,它会继续缩进正确的缩进级别。然而,绑定到一个密钥时,它会注意到它之前立即执行并缩进一个额外的级别。
效果不是累积性的......我认为这是因为函数末尾设置了奇怪的命令,最初会缩进该行,但随后会根据(scala-indentation)
和缩进来检查正确的缩进。
我不是100%在这个,但乍一看,这似乎是怎么回事。
那么解决方案是不让它进入代码路径。以下作品: (本地设置键[返回]“(拉姆达() (互动) (setq最后命令无) (新行和缩进))))) – qrest 2010-09-02 16:18:28