【问题标题】:Can't get Cider working不能让苹果酒工作
【发布时间】:2014-12-01 14:43:37
【问题描述】:

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

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

[cider/cider-nrepl "0.7.0"]

在我的project.clj:dependencies 部分。当我将这样一行添加到我的新项目中,然后运行 ​​lein replcider-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

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

但是我在 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。有一个更新可用,所以我现在有版本20141007.452。命令cider-version 只返回CIDER 0.8.0-snapshot。在我的project.clj:plugins 部分中使用[cider/cider-nrepl "0.8.0-SNAPSHOT"],无论我尝试哪个符号,我仍然会得到Symbol <whatever> not resolved

【问题讨论】:

    标签: emacs clojure cider


    【解决方案1】:

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

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

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

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

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

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

    CIDER 0.8.0snapshot(包:20141007.13)

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

    【讨论】:

    • FWIW,我已经开始使用稳定的 melpa 软件包站点,以避免像这样的前沿问题。 melpa-stable.milkbox.net/packages
    • 安装最新的 CIDER 包后是否重启了 Emacs?当我调用 M-x cider-version 时,我在 minibuffer 中得到“CIDER 0.8.0snapshot (package: 20141007.13)”。
    • 所以,您现在没有收到任何警告,对吧?您是否在要使用的命名空间中执行C-c C-k(编译命名空间)?
    • "每次您使用 M-x cider-jack-in 或从命令行使用 lein repl 启动 repl 时,leiningen 都会在启动 repl 之前下载最新的 CIDER 中间件。"这是错误的,默认是每 24 小时检查一次快照更新,尽管它是可配置的
    • 另外,通过安装每个库的最新开发技巧来解决版本不匹配问题是自愿成为 alpha 测试人员 - 这是一项社区服务,但可能效率不高。
    【解决方案2】:

    很明显,我遗漏的主要部分是我偶然发现的,在M-. 工作之前,我需要使用 Cx 向上评估文件的初始ns 表单Ce (cider-eval-last-sexp)。

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

    欢迎提出如何改进此流程的建议。

    【讨论】:

    • 必须先将命名空间加载到环境中,然后才能跳转到 vars,否则将无法跳转到任何内容。您可以在 Leiningen 的 project.clj 中设置 :main 以在使用 lein 启动 repl 时自动加载命名空间。如果您的 CIDER 包/中间件版本不匹配,您仍然会遇到所描述的错误,因此这不是您发布的问题的根本原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多