【问题标题】:Clojure code hotreloading featureClojure 代码热重载功能
【发布时间】:2016-01-04 09:26:28
【问题描述】:

我正在尝试基于 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 中调用(重置)函数。

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

【问题讨论】:

  • 你在视频中添加了按5m27s的reloaded.repl代码吗? (见github.com/weavejester/reloaded.repl
  • @MarkFisher,当然 - AFAIK 它提供(重置)功能,但不监视文件更改 - 我正在寻找什么。

标签: emacs clojure cider


【解决方案1】:

您可以在启动文件中使用以下 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,它将评估您文件的内容苹果酒的连接。 'make-it-local 值只是使这个钩子只应用于本地缓冲区,否则这个钩子会在你第一次在 cider-mode 中打开某些东西后为所有模式加载。

【讨论】:

  • 是的,这是一个很好的解决方案。如果在不久的将来找不到更好的解决方案,我会接受。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
  • 2018-10-25
  • 2018-09-05
  • 2018-08-09
  • 1970-01-01
  • 2016-09-03
  • 2019-11-27
相关资源
最近更新 更多