我在scala-mode下的Emacs中有以下代码(来自Scala 2.8包):
object t1 {
def main (args: List[String]) = {
println("Hello")
}
}
Run Code Online (Sandbox Code Playgroud)
我也将我的返回键设置为newline-and-indent.当我在最后一个括号后反复点击返回时,它会转到最左边的一列空行.当我再次按下返回时,它会缩进两个空格.然后它停留在这个缩进处.显然它不应该这样做.
但是,当我反复运行newline-and-indentMx并打字时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))))
Run Code Online (Sandbox Code Playgroud)
有趣的是,它每次都会检测到重复的调用和缩进.当使用Mx时,last-command不是scala-indent-line,它是execute-extended-command.因此,在使用Mx时,它会继续缩进到正确的缩进级别.但是,当绑定到某个键时,它会注意到它之前已立即执行并缩进了一个额外的级别.
效果不是累积的...我认为这是因为函数末尾的奇数命令设置,最初缩进该行,但随后用相应的缩进检查正确的缩进(scala-indentation).
我不是百分之百,但初看起来似乎正在发生的事情.
| 归档时间: |
|
| 查看次数: |
777 次 |
| 最近记录: |