6

上个月有人帮助我让 Cider 参与 Clojure 项目。我喜欢它的功能,尤其M-.cider-jump-to-var. 但是从那以后,无论是在原始项目中还是在新项目中,我都无法复制正确的行为,并且最初帮助我设置的人不再可用。

在我仍然签出的原始项目中,有一行

[cider/cider-nrepl "0.7.0"]

:dependencies我的部分project.clj。当我将这样一行添加到我的新项目中,然后运行lein repl​​andcider-connect时,我收到以下消息:

; CIDER 0.8.0alpha (package: 20141006.507) (Java nil, Clojure 1.6.0, nREPL 0.2.3)
WARNING: The following required nREPL ops are not supported: 
classpath complete info inspect-start inspect-refresh inspect-pop inspect-push inspect-reset macroexpand ns-list ns-vars resource stacktrace toggle-trace undef
Please, install (or update) cider-nrepl 0.8.0-snapshot and restart CIDER
WARNING: CIDER's version (0.8.0-snapshot) does not match cider-nrepl's version (0.7.0)

果然,当我跳转到符号的定义(比如first)时,我得到:

cider-ensure-op-supported: Can't find nREPL middleware providing op "info".  Please, install (or update) cider-nrepl 0.8.0-snapshot and restart CIDER

cider/cider-nrepl奇怪的是,当我将版本更改为"0.8.0-SNAPSHOT"in时,我得到了同样的错误project.clj

但后来我在 cider-nrepl Github 页面上注意到该cider/cider-nrepl行应该在 中:plugins,而不是:dependencies. 它绝对不在我的原始项目中,但它仍然以某种方式工作。好的,所以我将它移到:plugins我的新项目中。这次 nrepl 进程启动时没有错误,但是当我尝试跳转到定义时,再次说first,我得到:

Symbol first not resolved

现在,如果我尝试降级回0.7.0,在启动 cider 时会收到一条较短的消息:

WARNING: The following required nREPL ops are not supported: 
ns-list ns-vars undef
Please, install (or update) cider-nrepl 0.8.0-snapshot and restart CIDER
WARNING: CIDER's version (0.8.0-snapshot) does not match cider-nrepl's version (0.7.0)

...但我得到与以前相同的“符号首先未解决”。

这真是令人沮丧。我隐约记得在我最初的项目中工作时出现了某种版本不匹配的消息,并且跳转到定义的功能仍然有效。现在我无法让它为我的生活工作。任何帮助将不胜感激。

编辑添加:

在开始上述探索之前,我从我的软件包列表中删除并重新安装了 Cider。~/.m2/repository/cider我也在每一步之间删除。

今天早上,我有苹果酒版本20141006.507。有一个更新可用,所以我现在有了 version 20141007.452。该命令cider-version仅返回CIDER 0.8.0-snapshot. 在我[cider/cider-nrepl "0.8.0-SNAPSHOT"]:plugins部分中,无论我尝试哪个符号project.clj,我仍然得到。Symbol <whatever> not resolved

4

2 回答 2

10

您很可能在 Emacs 中从 MELPA 存储库安装 CIDER 包,这意味着您正在安装最新的 CIDER 快照包,这需要 project.clj 中的 [cider/cider-nrepl "0.8.0-SNAPSHOT"] 中间件才能正常工作.

由于您使用的是 CIDER 快照包,因此您也不能使用 0.7.0 CIDER 中间件。

当您使用 Mx cider-jack-in 或从命令行使用 lein repl 启动 repl 时,Leiningen 在启动 repl 之前会检查并下载最新的 CIDER 中间件(默认情况下,每天)。

这意味着您的中间件快照可能与您的 Emacs CIDER 包版本不同步,因为默认情况下,您将拥有手动安装时安装的 Emacs CIDER 包快照。

为了使中间件和 Emacs CIDER 包重新同步,您应该通过安装最新的 CIDER Emacs 包 M-x package-list-packages 并选择 cider 包进行安装。

然后,您应该重新启动 Emacs 并运行 M-x cider-version 并确认您在Messages中获得以下内容(截至今天) :

苹果酒 0.8.0 快照(包:20141007.13)

cider-jump-to-var 和所有其他 CIDER 功能应该可以工作。

于 2014-10-07T09:02:54.640 回答
1

显然,我偶然发现的主要遗漏是,在M-.工作之前,我需要使用( ) 来评估文件的初始ns形式。C-xC-ecider-eval-last-sexp

有时我会在尝试跳转到定义时收到一些无用的错误消息,例如“错误的类型参数:arrayp”,但它经常工作得足够可用。

欢迎就如何改进此过程提出建议。

于 2014-11-20T00:47:15.357 回答