2017-01-06 72 views
0

我想學習一些Clojure,我試圖從Emacs運行REPL,但是我無法使其運行。在emacs中運行cider-jack-in

我已經創建了一個基本項目lein。我打開生成的文件在Emacs core.clj,當我嘗試從它運行REPL(通過運行蘋果酒玩偶),我剛剛得到的消息:

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) 

當我運行在終端雷音運行,代碼運行正常。
此外,當我在終端運行雷音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 

雷音具有蘋果酒版本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") 
+0

當你調用'cider-jack-in'時,你在新項目中打開了一個文件嗎?你在哪個版本的Emacs上? –

+0

是的,我從項目('core.clj')打開文件,然後調用'cider-jack-in'。 我使用的Emacs版本24.5。 – Stanislav

+0

你是如何安裝蘋果酒和clojure模式,即手工或梅爾帕?你在emacs init文件中有什麼? –

回答

0

刪除您~/.emacs.d目錄,當你運行的Emacs與新spacemacs ~/.emacs.d目錄下安裝spacemacs代替

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

,你可以簡單地打開一個Clojure的文件,並spacemacs將在Clojure的層加載你。

更多細節可以在spacemacs找到。組織和在本教程中使用spacemacs的clojure開發https://practicalli.github.io/spacemacs/

+0

這是原始問題的解決方法,但它有效。 – Stanislav

1

這裏是我的雷音調試清單:

  • ~/.lein/profiles.clj
  • 刪除蘋果酒nrepl的任何meniton從終端運行lein repl,然後從emacs運行cider-connectlocalhost
  • 運行lein upgrade
  • 升級到最新版本的蘋果酒emacs軟件包
  • 在提交bug報告之前在clojure slack中的蘋果酒頻道詢問。

以前需要將蘋果酒的nrepl中間件添加到您的lein配置文件中,以便在lein啓動時將其添加到classpath中。現在,蘋果酒自動執行此操作,並選擇在它自己匹配的版本。很多人都在下面從時,這是一個手動過程的說明和遇到這樣的問題,所以檢查,第一。

+0

根據您的意見,我嘗試這麼做: 1.我移除了'profiles.clj'完全,因爲只有'cider-nrepl'插件在那裏被引用。 2.運行'lein repl'並運行'cider-connect'產生相同的結果; 3.我跑了'cider-connections-browser' - >沒有連接可見 4.我用自制軟件安裝了leiningen - 最新支持的版本是2.6.1,我看到最新版本是2.7.1。這會導致問題嗎?所有軟件包在Emacs中都是最新的。 事實上,我遵循的說明大多數是手動過程。 :) – Stanislav

+0

我刪除了leiningen的自制安裝版本,並手動安裝了最新的2.7.1版本,但我仍然有同樣的問題。 – Stanislav

0

所以錯誤似乎在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知道的緩衝區。