3

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

实际上,作者并没有使用 RING/wrap-reload 之类的功能,而是在每个缓冲区保存到 emacs 后,他的代码在 REPL 中重新加载。我想我在本地机器上有相同的库(苹果酒、苹果酒-nrepl、clj-refactor、clojure-mode),但是我的本地安装没有如图所示工作,它需要每次在 REPL 中调用(重置)函数。

PS我可以通过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 中对文件保存事件实现代码重新加载?

4

1 回答 1

5

您可以在启动文件中使用以下 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 中打开某些东西后,这个钩子将为所有模式加载。

于 2016-01-07T23:51:29.743 回答