Реклама в Telegram-каналах DzikPic и dev.by теперь дешевле. Узнать подробности 👨🏻‍💻
Support us

Emacs + Clojure за 60 секунд

Оставить комментарий
Emacs + Clojure за 60 секунд
В очередной раз переустановив систему и, конечно же, не сохранив конфиги, столкнулся с необходимостью снова настраивать свой environment, в частности, запускать Clojure. Clojure - это такой новомодный Лисп для JVM (а также CLR). Излюбленной средой разработки для многих лисперов, в том числе и для меня, является Emacs. К сожалению, до недавнего времени конфигурация Clojure в Emacs была сложной и долгой. В сети вы можете найти десятки, а то и сотни рецептов по приготовлению этого коктейля, но большинство из них устарели или ссылаются на недоступные ресурсы. В этой статье я предложу очень быстрый и простой способ заставить эту пару работать вместе. Проверка проходила на Ubuntu 10.04 и GNU Emacs 23. В целом должно так же хорошо работать и на других Линуксах (различия в инструкциях коммандной строки, я думаю, будут очевидны). На Windows единственное принципиальное отличие я вижу только в способе установки вспомогательных программ. Шаг 1. Устанавливаем Emacs: $ sudo aptitude install emacs Шаг 2. Кастомизируем его. Если вы никогда раньше не работали с этим редактором, то набор его горячих клавиш почти наверняка приведёт вас в замешательство. Чтобы этого не случилось, полезно сразу же сделать несколько настроек. Emacs при старте ищет конфигурацию в одном из следующих файлов: 1) ~/.emacs.el 2) ~/.emacs.d/init.el Мы воспользуемся вторым вариантом, т.к. нам ещё понадобится отдельная директория для хранения дополнительных пакетов: $ cd ~ $ mv .emacs.el .emacs.el.backup # убираем .emacs.el, если есть $ mkdir .emacs.d # создаём директорию, если отсутствует # $ emacs .emacs.d/init.el $ gedit .emacs.d/init.el # чтобы сразу же не столкнуться со сложностями быстрых клавиш Эмакса, можно написать его конфиг в любом другом редакторе В открывшемся файле вписываем (в мире Emacs буква C означает Ctrl, а буква M - Alt): (global-set-key "\C-q" 'suspend-emacs) ;; устанавливаем функцию закрытия Эмакса на Ctrl+Q (cua-mode) ;; CUA-mode, благодаря этой строчке мы сможем использовать привычные Ctrl+C, Ctrl+V, Ctrl+X, Ctrl+Z, а также выделение шифтом (show-paren-mode) ;; мы всё-таки в Лиспе, подсветка соответствующих скобок не помешает Шаг 3. Устнавливаем ELPA (Emacs Lisp Package Archive, главный пакетный менджер GNU Emacs): 1) запускаем emacs: $ emacs 2) переключаемся в пустой буфер (*scratch*), для этого используем комбинацию клавиш C-x b RET (Ctrl+X, затем B и Enter). Копируем или набираем следующее: (let ((buffer (url-retrieve-synchronously "http://tromey.com/elpa/package-install.el"))) (save-excursion (set-buffer buffer) (goto-char (point-min)) (re-search-forward "^$" nil 'move) (eval-region (point) (point-max)) (kill-buffer (current-buffer)))) scratch Устанавливаем курсор строго за последней скобкой и нажимаем C-j. Эта команда выполнит введённый нами код, а именно скачает и установит менеджер пакетов для Эмакса ELPA. Шаг 4. Устанавливаем нужные пакеты: M-x package-list-packages ;; нажать M-x (Alt+X), затем ввести package-list-packages В нижней части окна откроется список всех доступных пакетов: packagelistpackages Красным отмечены уже установленные. Чтобы отметить пакет для установки, подведите курсор к нужной строке и нажмите i, чтобы установить выделенные пакеты следует нажать x. Нам понадобятся пакеты clojure-mode, slime, slime-repl и swank-clojure. Если при установке Emacs выругается, что файл clojure-mode.el или какой-то другой уже существует, удалите этот файл (все пакеты скачиваются в папку ~/.emacs.d/elpa) и повторите установку со следующего неустановленного пакета - удалённые файлы подтянутся сами. Шаг 5. Устанавливаем Clojure. Для этого просто запускаем slime (M-x slime) - появится сообщение о том, что Clojure не установлен и предложение установить его. Согласитесь и подождите, пока скачаются нужные файлы и запустится REPL: replШаг 6. Проверяем. В REPL'е введите: user> (+ 4 5) Если появился ответ "9", значит REPL работает. Теперь откроем файл (C-x f foo.clj) и напишем простую функцию: (defn xxx [] (println "porn")) Загрузите этот файл (C-c C-l), переключитесь в REPL (C-c C-z) и проверьте работоспособность нашей функции: user> (xxx) Если всё верно, то должно быть выведено слово "porn", за которым следует nil: porng Собственно, всё. Не уложились в 60 секунд? Тогда ещё раз, но без коментариев: Шаг 1. $ sudo aptitude install emacs. Шаг 2. Кастомизируем по желанию. Шаг 3. $ emacs [C-x b RET] Вставляем: (let ((buffer (url-retrieve-synchronously "http://tromey.com/elpa/package-install.el"))) (save-excursion (set-buffer buffer) (goto-char (point-min)) (re-search-forward "^$" nil 'move) (eval-region (point) (point-max)) (kill-buffer (current-buffer)))) За последней скобкой жмём C-j Шаг 4. M-x package-list-packages Ставим "i" напротив clojure-mode, slime, slime-repl, swank-clojure Жмём "x" Шаг 5. M-x slime y (yes, в ответ на предложение установить Clojure) Шаг 6. (+ 4 5) [C-x f foo.clj] Набираем: (defn xxx [] (println "porn")) P.S. Исправления и пояснения для других операционных систем и версий Emacs'а приветствуются.
Новый рекламный формат в наших телеграм-каналах.

Купить 500 символов за $150

Читайте также
«В Минске не пишут на Clojure». Зачем Targetprocess выбрала для нового продукта редкий язык
«В Минске не пишут на Clojure». Зачем Targetprocess выбрала для нового продукта редкий язык
«В Минске не пишут на Clojure». Зачем Targetprocess выбрала для нового продукта редкий язык
F(by) 2015 в Минске: видео докладов
F(by) 2015 в Минске: видео докладов
F(by) 2015 в Минске: видео докладов
Что нас ждёт на F(by) 2015: Scala, Erlang, Clojure, Haskell и PureScript
Что нас ждёт на F(by) 2015: Scala, Erlang, Clojure, Haskell и PureScript
Что нас ждёт на F(by) 2015: Scala, Erlang, Clojure, Haskell и PureScript
Clojure в БГУ
Clojure в БГУ
Clojure в БГУ

Хотите сообщить важную новость? Пишите в Telegram-бот

Главные события и полезные ссылки в нашем Telegram-канале

Обсуждение
Комментируйте без ограничений

Релоцировались? Теперь вы можете комментировать без верификации аккаунта.

Комментариев пока нет.