这是一个 Emacs 问题,但由于有很多 Clojure Emacs 用户,我在这里提问,因为我对人们的知识渊博和乐于助人感到惊讶。
我在使用 Cider 在 Emacs 中。历史上,我倾向于仅仅重新加载文件然后直接在 REPL 中输入。最近,我发现了一种从 (注解. . .) 块中进行编写/测试的另一种风格。我很喜欢这种风格,但它对我来说还不是无缝工作。 @(我了解这在使用 JSCode 中的表现很好,但我不愿再训练我的手指 ...)
以下有两个命令似乎对将代码从源文件评估到 REPL 最有用:
1) cider-eval-sexp-at-point
2) cider-eval-last-sexp-to-repl
我对 cider-eval-sexp-at-point 的问题在于,结果是发送到 消息 缓冲区,而不是到 REPL。
对 cider-eval-last-sexp-to-repl 的问题在于,虽然它确实将评估结果发送到 REPL 缓冲区,但它将结果放置在光标所在的位置,而不是在 REPL 的末尾。此外,它没有执行一个“返回”,所以光标未准备好进行另一个评估。理想情况下,我想评估另一块代码,并让它在光标最新的位置结束。
也许目前已经有办法做到这一点,这将是最理想的。否则,我正在考虑编写一个新的 Emacs 命令来实现这一功能。
作为一名长期的 Emacs(目前是 Doom Emacs)用户,我已经编写了一些基本函数,但这个问题比我尝试过的任何问题都复杂。所以,任何建议都将受到欢迎。(我也可能会在 Emacs 网站上发布这个问题.)
以下是基本函数:
1) 在 Clojure 文件中开始,并将光标放置在 sexp 的末尾。
2) 执行函数。
3) sexp 被评估。
4) 在 REPL 缓冲区,当前光标将被移动到 REPL 的末尾,并在需要时刷新光标。
5>评估的结果将在 REPL 的末尾打印。
6) 然后“返回”将被发送到REPL,因此将有一个新的光标。
7) Clojure文件中的原始点不会有移动。
8) 这样,就可以在Clojure文件内部重复此功能,而无需在REPL之间移动。
这几乎与cider-eval-last-sexp-to-repl的功能相同。如上所述,它不会首先移动到REPL的末尾,而且它也不会发送“返回”。
欢迎提供任何建议。