在Emacs中,您可以评估Emacs Lisp表达式并将其替换为结果吗?

jus*_*nhj 23 emacs elisp

例如,如果我有文字:

Sum of items is (+ 1 2 3)
Run Code Online (Sandbox Code Playgroud)

我想移动到行的末尾,计算表达式并将其替换为结果,以便它显示为:

Sum of items is 6
Run Code Online (Sandbox Code Playgroud)

Sea*_*ean 40

将光标放在行的末尾,C-u C-x C-e将前面带括号的表达式的值插入缓冲区.您可以这样做,然后手动备份并删除原始表达式.如果这工作太多,这里有一个命令来评估前面的表达式并用它的值替换它:

  (defun replace-last-sexp ()
    (interactive)
    (let ((value (eval (preceding-sexp))))
      (kill-sexp -1)
      (insert (format "%S" value))))
Run Code Online (Sandbox Code Playgroud)


san*_*inc 8

与此相关,你可能会喜欢Luke Gorrie的" lively.el ",它在文本缓冲区中提供了emacs lisp表达式的实时替换.这是一个整洁的黑客.


kjf*_*tch 7

当我在Google搜索结果中遇到一个解决方案时,我正在寻找解决方案.

(defun fc-eval-and-replace ()
  "Replace the preceding sexp with its value."
  (interactive)
  (backward-kill-sexp)
  (prin1 (eval (read (current-kill 0)))
         (current-buffer)))
Run Code Online (Sandbox Code Playgroud)

http://emacs.wordpress.com/2007/01/17/eval-and-replace-anywhere/