我正在与Clojure开发一个宠物项目,但我想知道我是否可以加快我的工作流程。
我目前的工作流程(使用Compojure)是:
lein swank
启动Swank。M-x slime-connect
联系。C-c C-c
)it。有许多烦恼:
C-c C-k
)。我怀疑我做错了。我正在寻找改善上述观点和整个工作流程的方法,所以如果你愿意分享你的话,我会很感激。
P上。 S上。
之前我也使用过Vimclojure,因此也欢迎基于Vimclojure的工作流程。
答案 0 :(得分:19)
不完整的工作流程描述,只是一些想法:
可以使用ns-unmap
函数从名称空间中删除Var。为了方便起见,可以在其上构建undef
宏,例如像这样:
(defmacro undef [& syms]
`(do ~@(map (fn [s] `(ns-unmap *ns* '~s)) syms)))
ns-unalias
也可能是有意义的。
没有理由在每个文件夹中执行 C-c C-k 来查看包含名称空间的文件;您只需require
REPL所需的命名空间。
此外,如果您在SLIME REPL中键入几个字符然后使用 Mp / Mn 来浏览历史记录,则只输入与您输入的文本的初始位匹配的条目将显示手动。这与Paredit兼容(尾随的结束支架不会有问题)。所以,如果你在开始时建立一个巨大的需求 - (require '[foo :as f] '[bar :as b] '[clojure.contrib.sql :as sql] ...)
- 那么在重新启动Swank之后,你需要做的就是键入类似(require '[f
的内容并按 Mp 再次将该表单带到REPL提示符。
不可否认,这可以通过多种方式实现自动化(例如,让Swank REPL搜索配置文件,或者将一个简单的宏扩展为适当的require
形式,只需引入一个来自项目的实用程序命名空间 - 特别是后一种想法很容易实现),但我发现它在烦恼因素上足够低,到目前为止我还没有任何改进。
当您处于启用SLIME的缓冲区时,可以使用 C-c C-z 创建一个带有SLIME REPL的窗口。此外,如果您还没有,请尝试使用ido
。我倾向于使用在屏幕左侧的窗口中打开的代码缓冲区和右侧的REPL缓冲区;与windmove-left
和windmove-right
绑定一些方便的键,我往往很高兴。如果我需要经常查看其他缓冲区,我会使用额外的Emacs帧。
顺便说一句,我通常不使用lein swank
,我更喜欢我的自定义clojure-project
功能(Phil Hagelberg原创的调整版)。有时,我觉得有希望改进它...也许我会在下次发生时处理每个项目import
/ require
自动化。 ; - )
答案 1 :(得分:5)
我不确定Lein,但在Maven中你可以指定repl脚本的名称(replScript config param),它允许指定在REPL&的启动时执行哪些命令。 Swank ...如果您的项目有单独的命名空间,您可以使用clojure.contrib.find-namespaces中的函数来查找您的命名空间并加载它们....