为Elocs / Swank / Paredit提供Clojure的温和教程

时间:2010-02-18 00:15:49

标签: emacs clojure

我正在转向Emacs来处理Clojure / Lisp。 为了能够执行以下操作,我需要在Emacs上设置的所有信息是什么?

  1. 自动匹配/生成相应的右括号
  2. autoindent Lisp / Clojure风格,而不是C ++ / Java风格
  3. 语法突出显示
  4. 调用REPL
  5. 能够将文件中的部分代码加载到REPL中并对其进行评估。
  6. 如果我能在Emacs上进行设置后获取命令列表,那将会很棒。

5 个答案:

答案 0 :(得分:89)

[非作者编辑:这是从2010年开始,自2011年5月起,该过程已经大大简化。我将在2012年2月的设置说明中为此答案添加帖子。]

你需要整理几件:Emacs,SLIME(与Clojure完美配合 - 见swank-clojure),swank-clojure(SLIME服务器对应的Clojure实现),clojure-mode,Paredit当然,首先是Clojure罐子,然后也许是一些额外的东西,其中Leiningen可能是最值得注意的。 一旦完成设置,您将在Emacs中拥有您在问题中提及的所有工作流程/编辑功能。

基本设置:

以下是很棒的教程,介绍如何设置所有这些;网络上有更多,但其他一些已经过时了,而现在这两个似乎还可以:

  1. in which are found tricks of the trade concerning clojure authorship在Phil Hagelberg的博客上发帖; Phil保持了swank-clojure和clojure模式,以及一个名为Emacs Starter Kit的软件包,这对Emacs世界的任何新手都是明智的建议。这些说明似乎已经与最近基础设施的变化有关;如有疑问,请查找有关Clojure Google小组的其他信息。

  2. Setting up Clojure, Incanter, Emacs, Slime, Swank, and Paredit发布在Incanter项目的博客上。 Incanter是一个迷人的软件包,为嵌入Clojure的统计计算提供类似R的DSL。即使您不打算使用 - 甚至安装 - Incanter,这篇文章也会很有用。

  3. 全力以赴:

    一旦你设置了所有这些东西,你可以尝试立即开始使用它,但我强烈建议你做以下事情:

    1. 查看SLIME的手册 - 它包含在源代码中,实际上非常易读。此外,你绝对没有理由阅读整个50页的怪物手册;只需浏览一下,看看哪些功能可用。

      注意:最新上游源代码中SLIME的autodoc功能与swank-clojure 不兼容 - 如果您按照Phil Hagelberg的建议使用ELPA版本,则不会出现此问题(请参阅他上面提到的博客文章以获得解释)或者只是关闭autodoc(这是事物的默认状态)。后一个选项有一些额外的吸引力,因为你仍然可以使用Common Lisp的最新SLIME,以防你也使用它。

    2. 查看paredit的文档。有两种方法可以解决这个问题:(1)查看源代码 - 文件顶部有大量注释,其中包含您可能需要的所有信息; (2)当paredit-mode处于活动状态时,在Emacs中键入 Ch m - 将弹出一个缓冲区,其中包含当前主要模式的信息,然后是有关所有活动次要模式的信息(paredit就是其中之一)

      更新:我刚刚在Phil Hagelberg的Paredit上找到this cool set of notes ...这是一个文本文件的链接,我记得在某个地方看到一组很好的幻灯片,但现在似乎无法找到它。无论如何,它是如何工作的一个很好的总结。绝对要看看它,我现在不能没有Paredit而且这个文件应该让它很容易开始使用它,我相信。 : - )

    3. 事实上, Ch m 组合将告诉你在clojure模式下活动在SLIME REPL的所有键绑定(你要记住 Cc Ck 用于发送当前缓冲区以进行编译)以及任何Emacs缓冲区。

    4. 至于从文件加载代码然后在REPL中进行试验:使用前面提到的 Cc Ck 组合编译当前缓冲区,然后use或{{1}它在REPL的命名空间。接下来,试验一下。

      最后的注释:

      准备好在所有点击之前调整一段时间。涉及到很多工具,它们之间的相互作用大多相当平稳,但是并不是可以安全地假设您最初不需要进行一些调整。

      最后,这里有一些我保留在require中的代码,你在其他地方找不到它(尽管它基于Phil Hagelberg的一个很酷的功能)。我开始使用.emacs(Leiningen的一个较酷的功能)启动我的swank实例,并使用下面的lein swank函数从Emacs中启动整个事件。我尽力使后者产生一个与clojure-project提供的环境非常匹配的环境。哦,如果您只想在Emacs中使用REPL进行快速而肮脏的实验,那么使用正确的设置,您应该可以直接使用 M-x slime

      lein swank

答案 1 :(得分:10)

还有一个非常好的教程:

在30到45分钟内,您可以从头开始设置所有内容。

本教程不假设任何先前的Emacs知识(以及Clojure也是如此 - 在之前的帖子中有一个很好的Clojure介绍)。

答案 2 :(得分:8)

Emacs Starter套件对Clojure入门有很好的评价:

只回答你问题的沉闷部分:

Leiningen是一个非常简单的方法,可以使用正确的类路径设置swank并将其连接到Emacs。

这是一个很棒的视频:http://vimeo.com/channels/fulldisclojure#8934942 以下是

的project.clj文件的示例
(defproject project "0.1"
    :dependencies [[org.clojure/clojure
                      "1.1.0-master-SNAPSHOT"]
                   [org.clojure/clojure-contrib
                      "1.0-SNAPSHOT"]]
    :dev-dependencies [[leiningen/lein-swank "1.1.0"]]
    :main my.project.main)

然后运行:

lein swank

来自Emacs:

 alt-x slime-connect

答案 3 :(得分:2)

Clojure with Emacs上的{p> Clojure Documentation也很有用。

答案 4 :(得分:1)

CIDER(Clojure交互式 开发环境)。

它将涵盖您所需要的大部分内容。它包括:

  • 交互式REPL
  • 调试
  • 测试运行
  • 代码导航
  • 文档查找
  • 还有更多

除了CIDER,还有其他一些必不可少的 Clojure开发的附加组件,我将分别尝试将其分组 (主观上):

必需品

好人

基本知识(适用于任何语言)

  • magit – Emacs中的git瓷器

  • projectile –项目mgmt 用于查找文件,搜索等

  • helm –增量完成 和选择范围缩小框架(或 swiper

其他资源

如果您正在寻找已经完成大部分/所有这些操作的设置 为您工作,有两种选择: