您的問題源於您將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