如何在Clojure的REPL中实现函数和变量的自动扩展或自动完成。

11
有没有一种方法可以像在Common Lisp中那样,在Clojure repl中展开当前命令?
例如,假设我已经键入了:
Math/

我希望通过按tab键来展开该命名空间中所有可用的变量和函数。

我正在使用Clojure作为inferior-lisp,并想知道如何在Clojure的普通vanilla repl以及通过swank slime实现此目的。

3个回答

19

又有一票支持在Emacs下使用clojure-mode和slime。 特别是,如果您设置了auto-complete,那么您可以使用我的ac-slime包,在下拉列表中获得上下文感知的制表符补全。 这里是一个演示录像

并且,根据technomancy的评论,这里是如何将slime的完成绑定到hippie-expand中的

更新:从2012年开始,nreplnrepl.elac-nrepl正在取代slime和ac-slime;相同的功能,更小更简洁的代码库。

更新2:截至2013年10月,nrepl.el已更名为cider,它和ac-nrepl已经移至github上的clojure-emacs组织。 nrepl仍然是服务器组件。


到了2012年中期,仍然是使用REPL的最高效方式,现在它已经搭配Emacs24使用。 - raju-bitter

3

你尝试过Emacs的Clojure模式吗?它具有自动完成功能(建议会显示在新窗口中,如果只有一个可能的选项,则用于展开名称),高亮和许多其他不错的功能(不比CL差,但也不会更多)。

它可以通过ELPA获得。安装完ELPA后,键入M-x package-list-packages,将光标置于所需程序包附近,然后按i(已安装的程序包为红色)。您需要安装clojure-modeslimeslime-replswank-clojure程序包。完成标记i后,按x以完成安装。最后,按M-x slime - Emacs会告诉您Clojure未安装,并建议下载和使用最新版本。只需同意即可。

您还可以使用整合Emacs和Leiningen

2

在Clojure中,原始的repl功能十分有限,甚至没有历史记录。除了最基本的任务之外,应该尽量避免使用它。我认为你无法在inferior-lisp中获得这个功能,但是在slime repl中,你可以使用TAB键来完成类似的操作。在启用了slime的clojure-mode缓冲区中,可以使用M-TAB键,或将其与hippie-expand函数绑定。


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