Clojure代码的热加载功能

3
我正在尝试基于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中每次调用(reset)函数。
P.S. 我可以通过在EMACS中使用以下代码来大致获得相同的行为,但我不想使用这样的hack:
(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中实现文件保存事件上的代码重新加载?

你是否根据视频中的5分27秒添加了reloaded.repl代码?(请参阅https://github.com/weavejester/reloaded.repl) - Mark Fisher
@MarkFisher,没问题 - 据我所知它提供了(重置)功能,但不会监视文件更改 - 这不是我正在寻找的。 - Rustem
1个回答

6
您可以在启动文件中使用以下emacs-lisp来执行此类操作:
(add-hook 'cider-mode-hook
          (lambda ()
            (add-hook 'after-save-hook 'cider-load-buffer nil 'make-it-local)))

这将在运行cider-mode的缓冲区上添加一个钩子(即,在您完成cider-jack-in时的clojure文件),保存后,将调用cider-load-buffer,该函数将在cider连接中评估您文件的内容。 'make-it-local'值只是使此钩子仅适用于本地缓冲区,否则此钩子将在您第一次打开cider-mode后的所有模式中加载。


是的,这是一个好的解决方案。如果在不久的将来找不到更好的解决方案,我会接受它。谢谢! - Rustem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接