Emacs中的Scala REPL

Emacs中的Scala REPL,scala,emacs,read-eval-print-loop,Scala,Emacs,Read Eval Print Loop,我喜欢在Emacs中进行Scala开发,有时我会使用REPL测试代码片段,或者加载和测试我刚刚编写的一些代码。我使用的是Scala 2.9.1,我注意到当我在终端缓冲区中打开REPL时,事情基本上被破坏了。特别是,我无法从当前行中删除任何字符,也无法在当前行上向后移动光标。这是非常令人沮丧的,因为任何时候我输入错误的东西,我必须重新开始命令。我想知道是否有其他人在使用Emacs下的Scala REPL时遇到此问题,以及是否有人有潜在的解决方案。您可以安装并安装。我不知道如何调用REPL,但从EN

我喜欢在Emacs中进行Scala开发,有时我会使用REPL测试代码片段,或者加载和测试我刚刚编写的一些代码。我使用的是Scala 2.9.1,我注意到当我在终端缓冲区中打开REPL时,事情基本上被破坏了。特别是,我无法从当前行中删除任何字符,也无法在当前行上向后移动光标。这是非常令人沮丧的,因为任何时候我输入错误的东西,我必须重新开始命令。我想知道是否有其他人在使用Emacs下的Scala REPL时遇到此问题,以及是否有人有潜在的解决方案。

您可以安装并安装。我不知道如何调用REPL,但从ENSIME works调用REPL(我已经检查过,它允许向后移动光标和删除符号)。

我发现(readline wrapper)与emacs的ansi术语和scala配合得很好。只要调用“rlwrap scala”,您就可以正常进行bash行编辑和历史记录。另外,您的历史记录将跨越对scala的多次调用,这样您就不会在退出scala REPL后丢失键入的所有内容

如果rlwrap不适合您,只需切换到ansi术语中的行模式(默认情况下为C-x C-j)即可允许您在行上使用emacs样式的编辑,但不需要像历史记录和完成这样的shell细节


Ensime已经被提到了,所以如果您不介意所涉及的设置,我将把它作为一个很好的选择。您可以尝试使用,
amm
。我可以在emacs
ansi术语中确认制表符完成工作。对于其默认模式(基于stty)或使用
amm
,这是正确的。请注意,Dotty(暂定Scala 3)repl,
dotr
,也基于
amm
,并且在
ansi term

中具有工作选项卡完成功能。您如何在Emacs中启动repl?我使用ansi term打开了一个新的缓冲区。然后,在该终端缓冲区中,我通过直接调用“scala”或使用sbt控制台来启动REPL。无论哪种方式,这个问题似乎都会发生。您可能会更幸运地使用shell打开一个新的缓冲区,并从shell启动scala或sbt。谢谢您的提示。从Ensime调用REPL看起来确实解决了这个问题,但它引入了其他一些方法。特别是,通过Ensime调用的REPL没有命令历史记录,似乎无法完成制表符。@nomad:他们使制表符完成工作。看,谢谢你的提示。这对我来说似乎很有效。事实上,我喜欢rlwrap方法而不是Ensime方法,因为它给了我一个命令历史记录。现在,使用rlwrap方法通过Emacs调用REPL的唯一剩余限制是无法使用tab-completion?