0

我偶尔会在 Clojure 中犯一个错误,而且我做的次数不够多,还没有立即知道我忘记了什么,但我仍然经常这样做,以至于它真的很烦人。

基本上在 using 之后nrepl-jack-in,我经常忘记更改为正确的命名空间。

所以在 nrepluser>提示符下,我输入一个函数,我得到:

CompilerException java.lang.RuntimeException: Unable to resolve symbol: foo-bar-baz in this context, compiling:(NO_SOURCE_PATH:1)

在给我返回提示之前打印在nrepl缓冲区中。user>

所以我发现与其试图搞乱 Java/Clojure,可能有一种简单的方法可以直接从 Emacs 给出提示,只使用一些 Emacs 魔法。

如何添加钩子(?)或类似于 Emacs / nrepl-mode 的东西,以便在打印特定消息时(例如,包含“无法解析符号”和“在此上下文中”的消息)我可以添加一行这样说:

"Didn't you forget to change namespace?"

甚至:

"There's a .clj buffer opened using namespace abc.defk, didn't you forget to enter: (ns  abc.def) ?"

在 Clojure 中有相当多的错误消息我觉得很神秘,而且我通常需要一段时间才能弄清楚我做错了什么。如果我可以直接从 Emacs 中“个性化”这些错误消息,我会赢得相当长的时间。

那么我怎样才能“拦截”nrepl 输出并根据我的需要调整它们呢?

4

1 回答 1

1

您必须nrepl-default-err-handler在 nrepl.el 中进行更改才能达到预期的效果。或者,如果它与某个模式匹配,您可以建议 (with defadvice)替换其输出。nrepl-default-err-handler不过,从 nrepl.el 执行此操作对我来说似乎不是特别好的主意。也许 nREPL 中间件会是更好的方法。

于 2013-02-16T19:17:09.820 回答