Running cider-jack-in in emacs
我想学习一些Clojure,并且试图从Emacs运行REPL,但是我无法使其正常工作。
我已经与lein创建了一个基本项目。 我在Emacs中打开生成的文件core.clj,当我尝试从中运行REPL(通过运行cider-jack-in)时,我仅收到消息:
1 | Symbol's function definition is void: nil |
我已经切换了错误调试,回溯(最后几行)是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Debugger entered--Lisp error: (void-function nil) nil(#<buffer core.clj>) #[257" !\\203\\207\\300\\207" [exclude predicate] 3"\ \ (fn ELT)"](#<buffer core.clj>) seq-map(#[257" !\\203\\207\\300\\207" [exclude predicate] 3"\ \ (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"\ \ (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会使用以下信息正常运行:
1 2 3 4 | 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初始化文件的内容,删除了注释:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | (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") |
这是我的lein调试清单:
-
从
~/.lein/profiles.clj 删除任何苹果酒-nrepl配方 -
从终端运行
lein repl ,然后从emacs运行cider-connect 到localhost - 运行lein升级
- 升级到苹果酒emacs软件包的最新版本
- 在提交错误报告之前,在苹果酒频道中询问Clojure松弛情况。
以前需要将苹果酒的nrepl中间件添加到您的lein配置文件中,以便在lein启动时将其包含在类路径中。现在,苹果酒会自动执行此操作,并自行选择匹配的版本。许多人都遵循这是一个手动过程的说明,却遇到类似问题,因此请首先进行检查。
因此,错误似乎出现在第102行的
1 2 3 4 5 6 | (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知道的缓冲区。
删除您的
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
使用新的spacemacs
可以在spacemacs.org以及本教程中使用spacemacs https://practicalli.github.io/spacemacs/进行的Clojure开发中找到更多详细信息。