【问题标题】:Running cider-jack-in in emacs在 emacs 中运行 cider-jack-in
【发布时间】:2017-01-06 15:14:02
【问题描述】:

我想学习一些 Clojure,我正在尝试从 Emacs 运行 REPL,但我无法让它工作。

我用 lein 创建了一个基本项目。我在 Emacs 中打开生成的文件 core.clj,当我尝试从中运行 REPL(通过运行 cider-jack-in)时,我得到了留言:

Symbol's function definition is void: nil

我已经切换了错误调试,回溯(最后几行)是:

 Debugger entered--Lisp error: (void-function nil)
   nil(#<buffer core.clj>)
   #[257 "  !\203\207\300\207" [exclude predicate] 3 "\n\n(fn ELT)"](#<buffer core.clj>)
   seq-map(#[257 "  !\203\207\300\207" [exclude predicate] 3 "\n\n(fn ELT)"] (#<buffer core.clj> #<buffer  *Minibuf-1*> #<buffer *Warnings*> #<buffer *GNU Emacs*> #<buffer *scratch*> #<buffer  *Minibuf-0*> #<buffer *Messages*> #<buffer  *code-conversion-work*> #<buffer  *Echo Area 0*> #<buffer  *Echo Area 1*>))
   seq-filter(#[257 "r\211q\210\300\301!)\207" [derived-mode-p cider-repl-mode] 3 "\n\n(fn BUFFER)"] (#<buffer core.clj> #<buffer  *Minibuf-1*> #<buffer *Warnings*> #<buffer *GNU Emacs*> #<buffer *scratch*> #<buffer  *Minibuf-0*> #<buffer *Messages*> #<buffer  *code-conversion-work*> #<buffer  *Echo Area 0*> #<buffer  *Echo Area 1*>))
   cider-repl-buffers()
   cider-find-reusable-repl-buffer(nil "~/Development/languages/clojure/playground/test1/")
   cider-jack-in(nil)

当我在终端运行 lein run 时,代码运行正常。
另外,当我在终端中运行 lein repl 时,REPL 可以正常运行并显示以下信息:

nREPL server started on port 62741 on host 127.0.0.1 - nrepl://127.0.0.1:62741
REPL-y 0.3.7, nREPL 0.2.12
Clojure 1.8.0
Java HotSpot(TM) 64-Bit Server VM 1.8.0_45-b14

Lein 的 Cider 版本为 0.14.0,而 Emacs 下载的版本为 0.15.0。

谁能帮我弄清楚我缺少设置的哪一部分,或者我做错了什么?

感谢您的帮助!

编辑:下面是 Emacs 初始化文件的内容,删除了 cmets:

(require 'package)
(add-to-list 'package-archives
           '("marmalade" . "http://marmalade-repo.org/packages/") t)
(add-to-list 'package-archives
           '("tromey" . "http://tromey.com/elpa/") t)
(add-to-list 'package-archives
           '("melpa" . "http://melpa.milkbox.net/packages/") t)

(package-initialize)

(when (not package-archive-contents)
  (package-refresh-contents))

(defvar ido-cur-item nil)
(defvar ido-default-item nil)
(defvar ido-cur-list nil)
(defvar predicate nil)
(defvar inherit-input-method nil)

(defvar my-packages
  '(paredit
    clojure-mode
    clojure-mode-extra-font-locking
    cider
    ido-ubiquitous
    smex
    projectile
    rainbow-delimiters
    tagedit
    magit))

(if (eq system-type 'darwin)
    (add-to-list 'my-packages 'exec-path-from-shell))

(dolist (p my-packages)
  (when (not (package-installed-p p))
    (package-install p)))

(add-to-list 'load-path "~/.emacs.d/vendor")
(add-to-list 'load-path "~/.emacs.d/customizations")

(load "shell-integration.el")
(load "navigation.el")
(load "ui.el")
(load "editing.el")
(load "misc.el")
(load "elisp-editing.el")
(load "setup-clojure.el")
(load "setup-js.el")

【问题讨论】:

  • 您在调用cider-jack-in 时是否在新项目中打开了文件?你使用的是哪个版本的 Emacs?
  • 是的,我从项目 (core.clj) 中打开了文件,然后调用了 cider-jack-in。我使用的是 Emacs 24.5 版。
  • 您是如何安装 cider 和 clojure-mode 的,即手动安装还是从 melpa 安装?您的 emacs 初始化文件中有什么?
  • 我已经编辑了添加 Emacs 初始化文件的问题。我从 Brave Clojure 获取了配置,并从 Emacs 中的 melpa 更新了包。
  • 您是否检查过是否创建了 cider-repl 缓冲区? Cider 在后台创建这个缓冲区,所以你需要自己打开它。或者您是否尝试使用键绑定 C-x C-eC-M-x 评估 core.clj 中的任何代码行?如果这些绑定返回一个内联值,那么 repl 正在运行

标签: emacs clojure cider


【解决方案1】:

这是我的 lein 调试清单:

  • ~/.lein/profiles.clj 中删除任何 cider-nrepl 的暗示
  • 从终端运行 lein repl,然后从 emacs 运行 cider-connectlocalhost
  • 运行 lein 升级
  • 升级到最新版本的 cider emacs 包
  • 在提交错误报告之前,请在 clojure slack 上的 cider 频道中提问。

以前需要将 cider 的 nrepl 中间件添加到您的 lein 配置文件中,以便在 lein 启动时将其包含在类路径中。现在 cider 会自动执行此操作并自行选择匹配的版本。当这是一个手动过程时,许多人都按照说明进行操作并遇到此类问题,因此请先检查一下。

【讨论】:

  • 根据您的 cmets,这是我尝试做的: 1. 我完全删除了 profiles.clj,因为那里只引用了 cider-nrepl 插件。 2. 运行lein repl 和运行cider-connect 产生相同的结果; 3. 我跑了cider-connections-browser -> 没有可见的连接 4. 我用自制软件安装了 leiningen - 支持的最新版本是 2.6.1,我看到最新版本是 2.7.1。这会导致问题吗? 5. Emacs 中的所有包都是最新的。确实,如果是手动过程,我会按照说明进行操作。 :)
  • 我删除了 leiningen 的 homebrew 安装版本,并手动安装了最新的 2.7.1 版本,但我仍然遇到同样的问题。
【解决方案2】:

删除您的 ~/.emacs.d 目录并安装 spacemacs

git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d

使用新的 spacemacs ~/.emacs.d 目录运行 Emacs 后,您只需打开一个 Clojure 文件,spacemacs 就会为您加载到 Clojure 层。

更多详细信息可以在 spacemacs.org 和本教程中找到关于使用 spacemacs 进行 clojure 开发https://practicalli.github.io/spacemacs/

【讨论】:

  • 这是原始问题的解决方法,但它有效。
【解决方案3】:

因此错误似乎出现在cider-client.el 第 102 行 https://github.com/clojure-emacs/cider/blob/master/cider-client.el#L99 中。我在下面发布了整个defun:

(defun cider-repl-buffers ()
  "Return the list of REPL buffers."
  (seq-filter
   (lambda (buffer)
     (with-current-buffer buffer (derived-mode-p 'cider-repl-mode)))
   (buffer-list)))

您能否访问您的 CIDER 副本中的此文件并确保此定义看起来像这样。这段代码只是在寻找 repl 缓冲区并过滤 emacs 知道的缓冲区。

【讨论】:

    猜你喜欢
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 2023-03-22
    • 1970-01-01
    • 2016-12-14
    • 2019-03-02
    相关资源
    最近更新 更多