Запуск cider-jack-in в emacs

Я хотел бы изучить Clojure, и я пытаюсь запустить REPL из Emacs, но не могу заставить его работать.

Я создал базовый проект с помощью lein. Я открываю сгенерированный файл core.clj в Emacs, и когда я пытаюсь запустить 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.

Может ли кто-нибудь помочь мне выяснить, какая часть настройки мне не хватает или что я делаю не так?

Спасибо за помощь!

EDIT: Bellow - это содержимое файла инициализации 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")

person Stanislav    schedule 06.01.2017    source источник
comment
Вы открывали файл в своем новом проекте, когда вызывали cider-jack-in? На какой версии Emacs вы работаете?   -  person Stefan Kamphausen    schedule 06.01.2017
comment
Да, я открыл файл из проекта (core.clj) и затем вызвал cider-jack-in. Я использую Emacs версии 24.5.   -  person Stanislav    schedule 06.01.2017
comment
Как вы устанавливаете сидр и clojure-mode, т.е. вручную или из мелпы? Что у вас есть в вашем файле инициализации emacs?   -  person Tim X    schedule 07.01.2017
comment
Я отредактировал вопрос, чтобы добавить файл инициализации Emacs. Я взял конфигурацию из Brave Clojure и обновил пакеты из melpa в Emacs.   -  person Stanislav    schedule 07.01.2017
comment
Вы проверяли, был ли создан буфер cider-repl? Сидр создает этот буфер в фоновом режиме, поэтому вам нужно открыть его самостоятельно. Или вы пытались оценить какие-либо строки кода в core.clj, используя привязку клавиш C-x C-e или C-M-x? Если эти привязки возвращают встроенное значение, значит, ответ выполняется.   -  person jr0cket    schedule 07.01.2017
comment
Убедитесь, что вы используете последнюю версию Leiningen.org, инструмента сборки. На сегодняшний день это версия 2.7.1. Также предлагаем вам запустить Java 1.8. Наконец, создайте новый проект с новым именем проекта lein и попробуйте открыть ответ с открытым файлом project.clj или core.clj (неотредактированный)   -  person jr0cket    schedule 07.01.2017


Ответы (3)


Удалите каталог ~/.emacs.d и вместо этого установите spacemacs

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

После того, как вы запустите Emacs с новым каталогом spacemacs ~/.emacs.d, вы можете просто открыть файл Clojure, и spacemacs загрузится в слой Clojure за вас.

Более подробную информацию можно найти на spacemacs.org и в этом руководстве по разработке clojure с помощью spacemacs https://practicalli.github.io/spacemacs/

person jr0cket    schedule 07.01.2017
comment
Это обходной путь к исходной проблеме, но он работает. - person Stanislav; 08.01.2017

вот мой контрольный список отладки lein:

  • удалите все остатки сидра-нрепла из ~/.lein/profiles.clj
  • запустить lein repl из терминала, затем cider-connect в localhost из emacs
  • запустить обновление lein
  • обновить до последней версии пакета cider emacs
  • спросите в канале сидра о Clojure Slack перед отправкой отчетов об ошибках.

Раньше требовалось добавить промежуточное ПО cider nrepl в ваш профиль lein, чтобы оно было включено в путь к классам при запуске lein. Теперь сидр делает это автоматически и самостоятельно выбирает подходящую версию. Многие люди следуют инструкциям, когда это был ручной процесс, и сталкиваются с подобными проблемами, поэтому сначала проверьте их.

person Arthur Ulfeldt    schedule 06.01.2017
comment
Вот что я пытался сделать, основываясь на ваших комментариях: 1. Я полностью удалил profiles.clj, так как там упоминался только плагин cider-nrepl. 2. запуск lein repl и запуск cider-connect дают тот же результат; 3. Я запустил cider-connections-browser - ›соединения не видны 4. Я установил leiningen с помощью homebrew - последняя поддерживаемая версия - 2.6.1, и я вижу, что последняя версия - 2.7.1. Может ли это вызвать проблему? 5. Все пакеты в Emacs обновлены. В самом деле, я следовал инструкциям там, где чаще всего, если это был ручной процесс. :) - person Stanislav; 07.01.2017
comment
Я удалил версию leiningen, установленную homebrew, и установил последнюю версию 2.7.1 вручную, но у меня все еще есть та же проблема. - person Stanislav; 07.01.2017

Таким образом, ошибка появляется в 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 и убедиться, что это определение выглядит так. Этот код просто ищет буферы репликации и фильтрует те буферы, о которых знает emacs.

person dpsutton    schedule 07.01.2017