Я разрабатываю любимый проект с Clojure, но задаюсь вопросом, могу ли я ускорить свой рабочий процесс немного.
Мой текущий рабочий процесс (с Compojure):
lein swank
.M-x slime-connect
.C-c C-c
) это.Существует много раздражений с ним:
C-c C-k
) после перезапуска Чванства. Я подозреваю, что делаю все это неправильно.Я ищу способы улучшить вышеупомянутые точки и весь рабочий процесс в целом, таким образом, я ценил бы, если Вы совместно используете Ваш.
P. S.
Я также использовал Vimclojure прежде, таким образом, находящиеся в Vimclojure рабочие процессы приветствуются также.
Не полное описание рабочего процесса, только несколько идей:
Можно удалить Var из пространства имен с помощью функции ns-unmap
. Для большего удобства поверх нее можно построить макрос undef
, например, так:
(defmacro undef [& syms]
`(do ~@(map (fn [s] `(ns-unmap *ns* '~s)) syms)))))
ns-unalias
также может представлять интерес.
Нет смысла перебирать файлы, содержащие пространства имен, чтобы просто выполнить C-c C-k в каждом из них; вы можете просто потребовать
нужные вам пространства имен в REPL.
Более того, если вы наберете несколько символов в SLIME REPL, а затем воспользуетесь M-p / M-n для просмотра истории, будут показаны только записи, соответствующие начальному тексту, который вы ввели вручную. Это совместимо с Paredit (закрывающая скобка (скобки) не будет проблемой). Итак, если вы создадите огромный require в самом начале -- (require '[foo :as f] '[bar :as b] '[clojure.contrib.sql :as sql] ...)
-- то после перезапуска Swank вам достаточно набрать что-то вроде (require '[f
и нажать M-p, чтобы снова вывести эту форму в подсказку REPL.
Конечно, это можно автоматизировать различными способами (например, заставить Swank REPL искать конфигурационный файл, или, возможно, простой макрос, расширяющийся в соответствующую форму require
, которая может быть использована после ввода только одного пространства имен утилиты из проекта - особенно последнюю идею было бы легко реализовать), но я нахожу это достаточно низким по фактору раздражения, поэтому пока не беспокоюсь о каких-либо улучшениях.
Вы можете использовать C-c C-z, чтобы сделать окно с SLIME REPL всплывающим, когда вы находитесь в буфере с поддержкой SLIME. Кроме того, попробуйте использовать ido
если вы еще этого не сделали. Я обычно работаю с буфером кода, открытым в окне в левой части экрана, и буфером REPL в правой; с windmove-left
и windmove-right
, привязанными к некоторым удобным клавишам, я обычно вполне счастлив. Если мне нужно часто просматривать дополнительные буферы, я использую дополнительные фреймы Emacs.
Кстати, я не использую lein swank
обычно, я предпочитаю мою пользовательскую clojure-project
функцию (подправленную версию оригинальной функции Фила Хагельберга). Иногда я чувствую желание улучшить ее... возможно, в следующий раз я займусь автоматизацией import
/ require
для каждого проекта. ;-)
Не уверен насчет Lein, но в Maven можно указать имя скрипта repl (replScript config param), что позволяет указать какие команды будут выполняться при запуске REPL & Swank... И если у вас есть отдельные пространства имен для вашего проекта, вы можете использовать функции из clojure.contrib.find-namespaces, чтобы найти ваши пространства имен и загрузить их все....