gpt4 book ai didi

Emacs scala-mode 换行和缩进怪异

转载 作者:行者123 更新时间:2023-12-04 19:20:49 25 4
gpt4 key购买 nike

我在 scala-mode 下的 Emacs 中有以下代码(来自 Scala 2.8 包):

object t1 {
def main (args: List[String]) = {
println("Hello")
}
}

我也将返回键设置为 newline-and-indent .当我在最后一个大括号后反复按回车键时,它会转到最左边的一列空行。当我再次按回车时,它缩进两个空格。之后它就停留在这个缩进处。显然它不应该这样做。

但是,当我反复运行 newline-and-indent通过 M-x 并输入 newline-and-indent ,我没有得到两个空格的缩进。 reindent-then-newline-and-indent 也是如此。 .

为什么会有这种差异?

最佳答案

你的问题源于你反弹 enternewline-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 时,它会继续以正确的缩进级别缩进。但是,当绑定(bind)到一个键时,它会注意到它之前立即执行并缩进了一个额外的级别。

效果不是累积的...我认为这是因为在函数末尾设置了奇怪的命令,该命令最初缩进该行,但随后使用 (scala-indentation) 检查正确的缩进并相应地缩进。

我对此不是 100% 的,但乍一看,这似乎是正在发生的事情。

关于Emacs scala-mode 换行和缩进怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3614448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com