繁体   English   中英

Emacs Scala模式换行和缩进怪异

[英]Emacs scala-mode newline-and-indent weirdness

我在Scala模式下(来自Scala 2.8软件包)在Emacs中具有以下代码:

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

我还将返回键设置为newline-and-indent 当我在最后一个花括号之后反复按回车键时,它会转到最左边的空白行。 当我再次按回车键时,它会缩进两个空格。 然后,此后它将保持此缩进状态。 显然,它不应该这样做。

但是,当我反复通过Mx运行newline-and-indent并键入newline-and-indent ,我没有得到两个空格的缩进。 reindent-then-newline-and-indent

为什么会有这种差异?

您的问题源于您反弹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%对此,但是乍一看似乎就是这样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM