Настройка emacs / slime / swank для clojure с помощью leiningen - PullRequest
6 голосов
/ 23 октября 2011

Короткая версия: ошибки при запуске M-x slime-connect или M-x clojure-jack-in при использовании lein swank для запуска сервера swank.

Я использую emacs 24.0.50.1 в Ubuntu 10.10. Я установил следующие пакеты в emacs из ELPA: clojure-mode, paredit, slime, slime-repl

Я установил leiningen из github и добавил его в classpath, затем запустил lein plugin install swank-clojure 1.3.3. После этого я создал новый каталог ~ / tmp /, переместился в него и запустил: lein new test-project который, казалось, настроил все в порядке. Затем я открыл /tmp/new-project/project.clj в emacs и изменил его на:

(defproject test-project "1.0.0-SNAPSHOT"
:description "Test Project"
:dependencies [[org.clojure/clojure "1.2.1"]
               [org.clojure/clojure-contrib "1.2.0"]]
:dev-dependencies [[swank-clojure "1.3.3"]])

После этого я вернулся в папку / tmp / new-project и запустил lein deps, затем lein swank, чтобы загрузить зависимости и запустить сервер swank, который выдает:

Connection opened on local port 4005.

Вернувшись в emacs, я столкнулся с проблемой подключения его к серверу swank. Я попытался открыть файл core.clj и запустить M-x slime-connect, который выдает ошибку:

Symbol's function definition is void: define-slime-contrib

Что заставляет меня думать, что он либо не видит работающий сервер swank, либо нужно настроить его, чтобы он увидел сервер. Я также попытался (с тем же открытым файлом и с открытым project.clj) M-x clojure-jack-in, который, как я предполагаю, пытается запустить REPL clojure в папке проекта, но это дает следующее:

Debugger entered--Lisp error: (error "Could not start swank server: sh: lein: not found
")
signal(error ("Could not start swank server: sh: lein: not found\n"))
error("Could not start swank server: %s" "sh: lein: not found\n")
clojure-jack-in-sentinel(#<process swank> "exited abnormally with code 127\n")

Я следовал инструкциям из http://matthias -schneider.org / docs / clojure-setup / для пакетов emacs и настройки lein, затем начал следовать инструкциям Test Configuration из http://riddell.us/ClojureSwankLeiningenWithEmacsOnLinux.html однажды у меня возникли проблемы с подключением Mx slime-connect к REPL.

Обновление

удалил ~ / tmp / test-project, удалил пакеты emacs и /.emacs.d/elpa/, переустановил emacs, переустановил пакеты clojure-mode и paredit, скопировал ~ / .lein в / bin, чтобы не было пути проблемы (не был уверен, что /.lein или /.lein/bin должны быть в пути). Запустил /.lein/bin/swank-clojure, а затем открыл emacs, открыл project.clj и попробовал M-x slime-connect, который теперь запрашивает у меня хост (локальный по умолчанию), порт (по умолчанию 4005), говорит, что подключается к swank, выдает сообщение о swank и версии слизи, отличающиеся (y или n) y, тогда минибуферы дают error in process filter: Lisp connection closed unexpectedly. В терминале, где я запускал /.lein/bin/swank-clojure, появляется следующее сообщение об ошибке Java:

exception in read loop
java.lang.NumberFormatException: For input string: "    a6"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:470)
at swank.core.protocol$read_swank_message.invoke(protocol.clj:41)
at swank.core.connection$read_from_connection.invoke(connection.clj:59)
at swank.core$read_loop.invoke(core.clj:337)
at swank.swank$connection_serve$fn__1486$fn__1487.invoke(swank.clj:32)
at clojure.lang.AFn.applyToHelper(AFn.java:159)
at clojure.lang.AFn.applyTo(AFn.java:151)
at clojure.core$apply.invoke(core.clj:540)
at swank.swank$connection_serve$fn__1486.doInvoke(swank.clj:29)
at clojure.lang.RestFn.invoke(RestFn.java:397)
at clojure.lang.AFn.run(AFn.java:24)
at java.lang.Thread.run(Thread.java:636)

Обновление: Решено, мне нужно было удалить emacs и удалить ВСЕ из /.emacs.d/, а не только пакеты в / elpa /. После переустановки я получил только пакет clojure-mode, а не slime или slime-repl. Теперь можно подключиться к M-x clojure-jack-in и я готов выполнить некоторую работу!

Ответы [ 5 ]

2 голосов
/ 30 июля 2012

Я написал руководство для начинающих по настройке клиента Emacs + nREPL с автозаполнением и всплывающей документацией, так как большинство старых инструкций не подходили.В наличии здесь .Может быть полезным для новичков.

2 голосов
/ 25 октября 2011

вам не нужно устанавливать slime и slime-repl: они встроены в плагин lein (см. Внутри jar: swank-clojure-1.4.0-SNAPSHOT.jar \ swank \ payload).Вы должны установить только режим clojure.

Кроме того, при «переустановке» не забудьте также удалить скрытую папку .emacs.d в вашем каталоге $ HOME, иначе она сохранит ранее загруженные плагины Emacs.

Наконец, предпочтите clojure-jack-in, а не slime-connect - просто наличие slime-connect означает, что у вас все еще есть SLIME внутри Emacs, поэтому вы не удалили его.

1 голос
/ 23 октября 2011

Нет необходимости устанавливать плагин lein swank.Вы можете добавить зависимости в файл project.clj и просто lein swank & M-x slime-connect.

Попробуйте использовать swank-clojure "1.2.1", у меня это работает.

0 голосов
/ 29 марта 2012

это случилось со мной, когда я клонировал чужой проект clojure из более старой версии. их проект.clj имел:

:dev-dependencies [[lein-clojars "0.5.0"]
                   [swank-clojure "1.2.1"]]

что неправильно, я думаю, если вы используете M-x clojure-jack-in. удаление этих строк, запуск lein deps и подкачка работали для меня.

0 голосов
/ 25 октября 2011

Попробуйте сделать следующее, что работает для меня с Emacs 24 в Ubuntu:

  1. Установите Leiningen.Убедитесь, что каталог, в который вы устанавливаете lein, находится на $PATH!
  2. Установите плагин swank-clojure:

    lein plugin install swank-clojure 1.3.3

  3. Создайте новый проект с lein new.Не добавляйте swank-clojure к :dev-dependencies.(Вам действительно нужен только один или другой, плагин или запись в :dev-dependencies.)

  4. Запустите Emacs, убедившись, что он "видит" lein на $PATH, например, вот так:

    PATH=$PATH:/path-to/dir-where/lein-is emacs

    (Используйте эту команду, чтобы опробовать ее. Для постоянного использования вы должны обновить $PATH в файле .profile или установить lein в месте, которое уже находится на $PATH. В стандартной установке Ubuntu, ~/bin должно быть на $PATH.)

  5. Откройте файл из проекта, напримерproject.clj и запустите M-x clojure-jack-in.Это должно запустить сервер Swank и подключить к нему SLIME REPL.

...