这是一个关于 Emacs 的问题,但由于 Clojure Emacs 用户众多,我在此提问,因为我不得不佩服人们的知识和乐于助人的精神。
我在 Emacs 中使用 Cider。历史上,我总是直接重新加载文件然后直接在 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的结尾,也不会发送“返回”。
任何建议都受欣赏。