在Clojure REPL中是否可能拥有良好的制表符自动补全?

7

良好的标签补全意味着动态生成,使用反射或其他方式(不需要预定义的补全列表),并且知道特定位置可以和不能跟随什么。

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

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

5个回答

8

看一下reply,它比默认的REPL更好。它涵盖了你提到的三个用例中的两个,但不包括Java实例方法完成。

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


4

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


那么,要在控制台 REPL 中实现这个,我基本上只需要等更久吗? - Vi.

1
Eclipse CounterClockwise REPL的当前beta版本大大改进了代码补全功能,并涵盖了所有情况,包括Java补全。当然,它不是一个独立的命令行REPL。然而,Clojure作为一种动态语言,在类型补全方面存在一定的限制,这在像Haskell这样的强类型语言中要容易得多。

"..已经极大地改善了代码补全" -> 所以我最终应该期望它也会在命令行中出现; "这在像Haskell这样的强类型语言中要容易得多。" -> 我提到ipython是因为这个。 - Vi.
CCW的REPL是一个NREPL客户端,但NREPL用于执行代码并返回其输出,而不是输入代码。CCW使用的完成代码与Eclipse和其他CCW代码紧密相关,因此我不认为它会很快被纳入其他NREPL客户端中。 - NielsK

1

我使用Emacs作为编辑器,配合Slime和Emacs auto-complete,并且已经在Emacs中为Repl启用了所有这些功能:Java类和字段的自动完成,Clojure函数的自动完成以及文档。不幸的是,如果您没有使用Emacs作为编辑器/IDE,则无法使用这些功能。


同样的问题之前已经被问过了:如何在Clojure repl中自动扩展或自动完成函数和变量 - raju-bitter

0

看起来IClojure做这件事情相当不错。它受到IPython的启发,提供了制表符补全(不是全部,只有三种情况中的两种)并帮助在控制台中开发Clojure。虽然不是非常稳定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接