【问题标题】:How to enable tab completion in Scala's MainGenericRunner REPL (interactive interpreter)?如何在 Scala 的 MainGenericRunner REPL(交互式解释器)中启用制表符补全?
【发布时间】:2016-02-11 07:25:50
【问题描述】:

我已经向maven Java 项目1 添加了一个REPL(读取评估打印循环),该项目是用maven 构建的。 REPL can be started with a script。相关部分是

declare -r GRADLE_CLASSPATH="$(gradle :minidns-repl:printClasspath --quiet |tail -n1)"

java \
    -Dscala.usejavacp=true \
    -classpath "${GRADLE_CLASSPATH}" \
    scala.tools.nsc.MainGenericRunner \
    -i minidns-repl/scala.repl

到目前为止,这有效。使 REPL 完美的唯一缺少的是 tab 补全。我从 Scala 知道它确实支持这一点。

如何为MainGenericRunner启用它?

1:随意测试 REPL:

git clone https://github.com/rtreffer/minidns.git \
  && cd minidns \
  && ./repl`

然后执行 DNS 查询,例如c.query("wikipedia.org", TYPE.A)

【问题讨论】:

  • 它做得很差。要正确完成选项卡,请查看lihaoyi.github.io/Ammonite/#Ammonite-REPL
  • 我刚刚切换了 Ammonite REPL,并且制表符完成工作开箱即用。见github.com/rtreffer/minidns/commit/…请把这个作为答案,这样你就可以收集你的赏金了:)
  • 啊,一秒钟,我知道在尝试调用方法时会出错:“Main.scala:11:内部重命名了两次 import ammonite.repl.frontend.ReplBridge.repl.{”跨度>
  • 当您导入 import de.measite.minidns._ 时,它会导入 'repl' 对象,之后菊石会失败。要么不要使用通配符导入,要么重命名 de.measite.minidns.repl,直到 ammonite 被修复。

标签: scala read-eval-print-loop


【解决方案1】:

虽然当前的 scala repl 现在有自动完成功能,但它运行得不是很好。 (除了 som-snytt 提到的issue)。

如果您需要 repl 中的工作完成,您最好选择 Ammonite REPL,它还具有比标准 repl 更多的功能。

注意:我没有在 2.11.8 中测试过选项卡补全,但看起来它们是从头开始重写的,看起来很有希望。

【讨论】:

    【解决方案2】:

    有一个 known issue-i 的处理方式一样,会中断完成。

    还有一个修复待定,但我不知道它是否会进入 2.11.8,它也有一个完整的 new completion feature.

    【讨论】:

      猜你喜欢
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 2013-09-08
      • 2015-06-29
      • 1970-01-01
      相关资源
      最近更新 更多