【问题标题】:Is it possible to have _good_ tab completions in Clojure REPL?Clojure REPL 中是否可以有 _good_ 选项卡补全?
【发布时间】:2012-08-08 23:26:29
【问题描述】:

良好的选项卡补全意味着使用反射或其他方式动态生成(不需要在某处预定义补全列表),并且知道在特定位置可以遵循什么,不可以遵循什么。

就像在(.<TAB> x) 中我将获得x 的方法列表,在(println <TAB>) 我获得本地和全局定义列表,在(Math/<TAB> 我获得数学函数列表...

例如,我喜欢 Tab 在 ghci (Haskell) 或 ipython 中的工作方式。

【问题讨论】:

    标签: clojure read-eval-print-loop tab-completion


    【解决方案1】:

    查看reply 以获得比默认更好的 REPL。它涵盖了您提到的三个用例中的两个,而没有涉及 Java 实例方法完成。

    如果您使用leiningen v2+,它是lein repl 命令调用的默认REPL。

    【讨论】:

      【解决方案2】:

      这当然是可能的,并且一些工具正在朝着这个方向发展。最新版本的 clojure 包含一个“开发模式”选项,可以更轻松地构建此类工具;例如,它关闭本地清除以帮助调试,其目的是最终能够导出更多关于编译过程的信息,以供 IDE 和相关工具使用。这被广泛认为是改进 Clojure 生态系统的一个领域,根据我的观察,有几个非常聪明的人正在研究它。

      【讨论】:

      • 所以要在控制台 REPL 中使用它,我基本上只需要等待更多时间?
      【解决方案3】:

      Eclipse CounterClockwise REPL 的当前 beta 版本大大改进了代码完成,并涵盖了您的所有案例,包括 Java 完成。当然,除了不是独立的命令行 REPL。 Clojure 是一种动态语言,但是它对类型完成有限制,这在 Haskell 等强类型语言中要容易得多。

      【讨论】:

      • ".. 大大提高了代码完成度" -> 所以我应该期望它最终也会出现在命令行中; “这在 Haskell 等强类型语言中要容易得多。” -> 因为这个,我提到了 ipython。
      • CCW 的 REPL 是一个 NREPL 客户端,但 NREPL 用于执行代码并返回其输出,而不是代码条目。 CCW 使用的完成代码与 Eclipse 和其他 CCW 代码紧密相关,因此我认为它不会很快被合并到其他 NREPL 客户端中。
      【解决方案4】:

      我将 Emacs 用作带有 Slime 和 Emacs auto-complete 的编辑器,并且所有这些功能都适用于 Emacs 中的 Repl:Java 类和字段的自动完成、自动完成以及 Clojure 函数的文档。不幸的是,如果您不使用 Emacs 作为编辑器/IDE,这将不起作用。

      【解决方案5】:

      看起来IClojure 或多或少地做得很好。它受到启发,看起来像 IPython,并提供选项卡完成(不完整,提到了 3 个案例中的 2 个)并帮助在控制台中开发 Clojure。虽然不是很稳定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-25
        • 2013-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 2011-05-14
        相关资源
        最近更新 更多