运行 emacs 中的 cider-jack-in
Running cider-jack-in in emacs
我想学习一些 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 " !3707" [exclude predicate] 3 "\n\n(fn ELT)"](#<buffer core.clj>)
seq-map(#[257 " !3707" [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 "r1q001!)7" [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 运行时,代码运行正确。
此外,当我在终端中 运行 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 初始化文件的内容,删除了注释:
(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
中删除 cider-nrepl 的任何 meniton
- 运行
lein repl
从终端,然后 cider-connect
到 localhost
从 emacs
- 运行 林升级
- 升级到最新版本的 cider emacs 包
- 在提交错误报告之前,请在 clojure slack 上的苹果酒频道中提问。
过去需要将 cider 的 nrepl 中间件添加到您的 lein 配置文件中,以便在 lein 启动时将其包含在类路径中。现在 cider 会自动执行此操作并自行选择匹配的版本。当这是一个手动过程并且 运行 遇到这样的问题时,许多人都按照说明进行操作,因此请先检查一下。
删除您的 ~/.emacs.d
目录并改为安装 spacemacs
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
一旦您 运行 Emacs 有了新的 spacemacs ~/.emacs.d
目录,您只需打开一个 Clojure 文件,spacemacs 就会为您加载 Clojure 层。
可以在 spacemacs.org 和本教程中找到有关使用 spacemacs 进行 clojure 开发的更多详细信息 https://practicalli.github.io/spacemacs/
所以错误似乎在 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 知道的缓冲区。
我想学习一些 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 " !3707" [exclude predicate] 3 "\n\n(fn ELT)"](#<buffer core.clj>)
seq-map(#[257 " !3707" [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 "r1q001!)7" [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 运行时,代码运行正确。
此外,当我在终端中 运行 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 初始化文件的内容,删除了注释:
(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
中删除 cider-nrepl 的任何 meniton
- 运行
lein repl
从终端,然后cider-connect
到localhost
从 emacs - 运行 林升级
- 升级到最新版本的 cider emacs 包
- 在提交错误报告之前,请在 clojure slack 上的苹果酒频道中提问。
过去需要将 cider 的 nrepl 中间件添加到您的 lein 配置文件中,以便在 lein 启动时将其包含在类路径中。现在 cider 会自动执行此操作并自行选择匹配的版本。当这是一个手动过程并且 运行 遇到这样的问题时,许多人都按照说明进行操作,因此请先检查一下。
删除您的 ~/.emacs.d
目录并改为安装 spacemacs
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
一旦您 运行 Emacs 有了新的 spacemacs ~/.emacs.d
目录,您只需打开一个 Clojure 文件,spacemacs 就会为您加载 Clojure 层。
可以在 spacemacs.org 和本教程中找到有关使用 spacemacs 进行 clojure 开发的更多详细信息 https://practicalli.github.io/spacemacs/
所以错误似乎在 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 知道的缓冲区。