【问题标题】:How to do the equivalent of eval-last-sexp on Clojure code如何在 Clojure 代码上执行相当于 eval-last-sexp 的操作
【发布时间】:2012-04-25 14:44:06
【问题描述】:

EDIT 出于一个我还没有完全理解的原因,我的 C-x C-e 被绑定到 eval-last-sexp 而不是 (?) slime -eval-last-expression。现在我可以从 .clj 缓冲区中 C-x C-e 并且我至少可以直接看到我的函数何时(不)正确,但是,这显然不会使我只是 slime-eval-last-expression 对 REPL “可用”的函数。

我已经设置了我的 Emacs 来进行一些 Clojure 编程,但我不知道我的设置是否正确。

我有两个缓冲区:一个用于 .clj 文件,一个用于 REPL。我正在使用 clojure-jack-in 来启动 REPL。

显然我需要始终编译 .clj(这 also 总是迫使我在提示符下保存文件),然后我需要切换到 REPL 并在 REPL 中发出一个 (use 'myname.space),然后才能尝试我写的一个新函数。

这似乎是一件非常简单的事情。

现在,当然,我可以编写一个 Emacs 宏来完成整个保存/确认/切换到 REPL/问题(使用 'myname.space) shebang,但我想知道我的设置是否正确还是不行?

我想换句话说,我的问题是:我连接的 REPL 是否应该始终与包含我正在处理的 .clj 的缓冲区“同步”或不是吗?

【问题讨论】:

    标签: emacs clojure synchronization read-eval-print-loop


    【解决方案1】:

    如果您使用 Emacs 编辑 clojure,则应该使用 Slime。见https://github.com/technomancy/swank-clojure

    然后,当您在 emacs 中使用 M-x clojure-jack-in 启动和连接 REPL 时,您只需执行 C-x C-e 编译和加载当前 sexp,或 C-x C-k 编译和加载当前缓冲区。

    换句话说,您的 repl 不会“自动”与您刚刚在某些 clojure 代码缓冲区中键入的任何内容同步,但是有更快速、更简单的方法可以将代码从缓冲区发送到正在运行的 clojure 程序。

    【讨论】:

    • 但我正在使用 clojure-jack-in...如果我问 C-x C-e 绑定了什么,它会说 eval-last-sexp 它显然试图评估代码,就好像它是 elisp 代码(?)。换句话说:每次我尝试从缓冲区中 eval-last-sexp 时都会遇到异常。使用 C-c C-k 可以很好地编译相同的文件,并且相同的函数在 REPL 中可以正常工作(使用剪切/粘贴或调用 use)。 C-x C-e 应该运行的函数的名称是什么? eval-last-sexp ?
    • 我认为第一个问题是我的 C-x C-e 被绑定到 eval-last-sexp 而不是 slime-eval-last-expression。不是 100% 确定所说的整个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 2015-01-19
    • 2013-01-07
    • 1970-01-01
    • 2011-05-03
    • 2016-02-14
    • 2010-09-12
    相关资源
    最近更新 更多