Clojure代码热重载功能

时间:2016-01-04 09:26:29

标签: emacs clojure cider

我正在尝试基于EMACS + CIDER设置我的环境以进行clojure开发,顺便说一下,我在本次视频中以6:20-6:25的比例看到了热重载功能。 http://www.parens-of-the-dead.com/e1.html

实际上,作者没有使用像RING / wrap-reload这样的功能,但是在emacs中保存每个缓冲区之后,他的代码会在REPL中重新加载。我想我在本地机器上有相同的库(cider,cider-nrepl,clj-refactor,clojure-mode),但我的本地安装没有显示,它需要每次在REPL中调用(重置)函数。

P.S。我可以通过EMACS中的代码粗略地获得相同的行为,但我不想使用这样的黑客:

(defun my-clojure-reset ()
  "Reload clojure once file were saved."
  (when
      (s-ends-with? "clj" (buffer-file-name))
    (cider-interactive-eval "(do (ns user) (reset))")))

(add-hook 'after-save-hook 'my-clojure-reset)

如何在EMACS + CIDER中实现文件保存事件的代码重装?

1 个答案:

答案 0 :(得分:5)

您可以在启动文件中使用以下emacs-lisp执行此类操作:

(add-hook 'cider-mode-hook
          (lambda ()
            (add-hook 'after-save-hook 'cider-load-buffer nil 'make-it-local)))

这只在运行苹果酒模式的缓冲区上添加了一个钩子(即当你已经完成了cider-jack-in时的clojure文件),保存后会调用cider-load-buffer,这将评估你的内容苹果酒连接中的文件。 ' make-it-local值只是使得这个钩子只被应用到本地缓冲区,否则这个钩子会在你第一次在苹果酒模式下打开之后为所有模式加载。