Ihr Problem rührt von der Tatsache her, dass Sie enter
auf newline-and-indent
zurückprallen, was bei Verwendung von scala-mode
nicht idiomatisch zu sein scheint. newline-and-indent
endet mit dem Aufruf indent-according-to-mode
, die für einige unerwünschte Einstellungen überprüft, um sie herum funktioniert, wenn nötig, und wenn alles in Ordnung ist, ruft am Ende indent-line-function
, die eine Puffer lokale Variable ist.
Da dies modusspezifisch ist, definieren Modi ihre eigenen indent-line-function
. Die meisten haben ziemlich konsistentes Verhalten, aber Scala Funktion ist scala-indent-line
, hier zu sehen:
(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))))
Das Komische daran ist, dass es wiederholt Anrufe und Einzüge erkennt ferner über jede Zeit. Bei Verwendung von M-x ist last-command
nicht scala-indent-line
, sondern execute-extended-command
. Wenn Sie also M-x verwenden, wird die Einrückung auf der korrekten Einrückebene fortgesetzt. Wenn es jedoch an einen Schlüssel gebunden ist, merkt es, dass es unmittelbar zuvor ausgeführt wurde, und fügt einen zusätzlichen Level hinzu.
Der Effekt ist nicht kumulativ ... Ich denke, das liegt an dem ungeraden Befehlssatz am Ende der Funktion, der zuerst die Zeile einrückt, dann aber mit (scala-indentation)
und Einrückungen nach dem richtigen Einzug sucht.
Ich bin nicht 100% darauf, aber auf den ersten Blick scheint das so zu sein.
Na dann die Lösung, es nicht in diesen Code-Pfad zu lassen. Die folgenden Werke: (local-Set-Taste [Return] (Lambda() (interaktiv) (setq letzten Befehl nil) (Newline-and-indent))))) – qrest