Ваша проблема проистекает из того факта, что вы восстанавливаете 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))))
Самое смешное в этом то, что он обнаруживает повторяющиеся вызовы и отступы в дальнейшем каждый раз.При использовании Mx last-command
- это не scala-indent-line
, а execute-extended-command
.Таким образом, при использовании Mx он продолжает отступ на правильном уровне отступа.Однако, когда он привязан к ключу, он замечает, что он был выполнен немедленно ранее, и добавляет дополнительный уровень.
Эффект не кумулятивный ... Я думаю, что это из-за нечетной команды, установленной в концефункция, которая изначально выравнивает строку, но затем проверяет правильность отступа с помощью (scala-indentation)
и отступов соответственно.
Я не на 100% в этом, но на первый взгляд кажется, что это происходит.