У Eclipse были те же проблемы со скоростью работы, к которым еще и прибавлялся интерфейс, не блещущий минималистичностью из коробки.
Из-за вышеперечисленных недостатков я вернулся к Emacs'у - как никак у него была и минималистичность, и не тормозящий интерфейс,
На настройку редактора под Clojure я затратил увы немалое количество времени, в основном из-за этапа по прикручиванию SLIME к Emacs'у - в мануалах рекомендовалось ставить кучу какого-то софта, в большинстве случаев устаревшего, поскольку авторы руководств предлагали использовать ELPA.
В конце концов, не без помощи @Ryukzak'а, у меня получилось узреть работающий SLIME для Clojure, процесс получения которого я и собираюсь описать - вдруг кому-нибудь понадобится.
Вначале, я опишу процесс установки и настройки нескольких расширений, которые облегчают редактирование исходного кода на Clojure. Если вам нужен лишь только SLIME - переходите к соответствующей части поста.
clojure-mode
Данное расширения для Emacs'а, добавляет автодополнение, подсветку синтаксиса и еще некоторые плюшки для файлов с кодом на Clojure (расширение *.clj).
Данное расширение можно скачать отсюда или забрать отсюда: git://github.com/technomancy/clojure-mode.git .
Все файлы расширения должны быть помещены в каталог ~/.emacs.d/elisp/clojure-mode или аналогичный ему, а в ~/.emacs должны быть добавлены следующие строки:
paredit
Некоторые люди ошибочно считают, что главная проблема Лиспоподобных языков это скобочки, которые приходится расставлять в неимоверном количестве и постоянно заботиться о том, чтобы каждой открывающей скобке соответствовала закрывающая.
На самом деле, просто нужно использовать правильные текстовые редакторы с правильными расширениями, которые позволяют не заботиться о скобочках. Одно из таких расширений - paredit. Оно просто вставляет на каждую открывающую скобку еще одну закрывающую скобку, а если количество открывающих и закрывающих скобок не совпадает - показывает это пользователю, выделяя лишнюю скобку.
Скачать расширение можно здесь, установка и настройка происходят так же, как и у предыдущего расширения. Нужно лишь добавить (paredit-mode 1) в my-clojure-mode-hook сверху и вот этот код в ~/.emacs:
Если нужно просто добавить скобку, без автодобавления закрывающей скобки или перехода на соответствующую закрывающую скобку, то следует использовать комбинацию клавиш C-q скобка. Если нужно удалить ненужную скобку - используйте комбинацию клавиш C-u DEL.
Highlight symbol
Данное расширение подсвечивает совпадающие слова в программном коде. Бывает удобно, чтобы проверить совпадает ли имя функции или переменной с уже написанным и так далее... Выглядит примерно так:
Установка и настройка расширения такие же, как и для уже описанных расширений. Скачать плагин можно тут. Пример настроек для плагина приведен на этом же сайте. Но поскольку я использую данный плагин лишь вместе с clojure, то я совместил его настройки с настройками clojure-mode. Конфиг для clojure-mode вместе с highlight-symbol выглядит так:
Перейдем теперь непосредственно к теме данного поста.
SLIME
Вначале следует установить все необходимое для работы SLIME с Clojure, а именно swank-clojure, который позволяет использовать SLIME для проектов на Clojure. К счастью, компилировать исходные и писать конфигурационные файлы на этом этапе не нужно - достаточно скачать скрипт lein отсюда:
https://github.com/technomancy/leiningen/raw/stable/bin/leinвыполнить его с параметром self-install и добавить путь к скрипту в $PATH. Теперь у нас есть система сборки для проектов на Clojure, которая умеет сама разрешать различные зависимости, в том числе она может загрузить и установить вышеупомянутый swank-clojure. Достаточно лишь оформить проектный файл project.clj так, как описано здесь (внимание! версии зависимостей несколько устарели). Теперь, для каждого нового проекта достаточно выполнить lein deps и swank-clojure будет сам загружен куда-надо.
Установка же самого SLIME проста как-никогда:
- Скачиваем последнюю версию SLIME отсюда
- Копируем все полученные файлы в ~/.emacs.d/elisp/slime
- Добавляем следующие строки в ~/.emacs:
Теперь мы можем использовать SLIME для программ на Clojure, которые используют lein в качестве системы сборки. Всего-то нужно перейти в каталог проекта и запустить swank командой lein swank, а затем подключиться к нему при помощи M-x slime-connect. Все - у нас есть работающий REPL!
Для большего удобства можно использовать плагин elein.el, который по команде M-x elein-swank сам запускает swank, подключает к нему SLIME и открывает REPL в отдельном буфере. Что самое приятное - этот плагин умеет также делать M-x elein-reswank и M-x elein-kill-swank.
Take this REPL, brother, and may it serve you well.
Для большего удобства можно использовать плагин elein.el, который по команде M-x elein-swank сам запускает swank, подключает к нему SLIME и открывает REPL в отдельном буфере. Что самое приятное - этот плагин умеет также делать M-x elein-reswank и M-x elein-kill-swank.
Take this REPL, brother, and may it serve you well.