Clojure 代码热重载功能
Clojure code hotreloading feature
我正在尝试基于 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 中实现文件保存事件代码重新加载的建议吗?
您可以在启动文件中使用以下 emacs-lisp 执行此类操作:
(add-hook 'cider-mode-hook
(lambda ()
(add-hook 'after-save-hook 'cider-load-buffer nil 'make-it-local)))
这仅在缓冲区 运行 cider-mode(即完成后的 clojure 文件 cider-jack-in)上添加一个钩子,保存后将调用 cider-load-buffer,它将在 cider 连接中评估文件的内容。 'make-it-local 值只是为了让这个挂钩只应用于本地缓冲区,否则这个挂钩会在你第一次打开 cider-mode 中的东西后加载所有模式。
我正在尝试基于 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 中实现文件保存事件代码重新加载的建议吗?
您可以在启动文件中使用以下 emacs-lisp 执行此类操作:
(add-hook 'cider-mode-hook
(lambda ()
(add-hook 'after-save-hook 'cider-load-buffer nil 'make-it-local)))
这仅在缓冲区 运行 cider-mode(即完成后的 clojure 文件 cider-jack-in)上添加一个钩子,保存后将调用 cider-load-buffer,它将在 cider 连接中评估文件的内容。 'make-it-local 值只是为了让这个挂钩只应用于本地缓冲区,否则这个挂钩会在你第一次打开 cider-mode 中的东西后加载所有模式。