2010-06-14 21 views

回答

36

将光标放在行尾,C-u C-x C-e将插入先前加括号的表达式的值到缓冲区中。你可以做到这一点,然后手动备份并删除原始表达式。如果这是太多的工作,这里的计算结果前面的表达式,并用它的值替换它的命令:

(defun replace-last-sexp() 
    (interactive) 
    (let ((value (eval (preceding-sexp)))) 
     (kill-sexp -1) 
     (insert (format "%S" value)))) 
+0

非常感谢,这是完美的 – justinhj 2010-06-15 03:25:08

0

看功能eval-print-last-sexp,你可以使用它建立一些东西

0

我的emacs-fu没有那么强大,所以我不知道是否有一个单一的命令来做到这一点,但你可以让自己成为一个(有点脆弱的)宏...将这些行放入你的.emacs

(fset 'eval-sexp-in-place 
     [?\M-x ?e ?v ?a ?l ?- ?p ?r ?i ?n tab return ?\M-^ ?\M-^ ?\C-\M-b ?\C-\M-k ?\C-d]) 
(global-set-key [(control x) (control a)] 'eval-sexp-in-place) 

这工作得很好,但是有一个问题,它:你必须在SEXP的(即在最后一个权利之后)让它工作。

此外,我选择了一个随机的未绑定的密钥(C-x C-a) - 随意更改为更喜欢你的东西。

8

与此相关的,你可能会喜欢卢克戈里的“lively.el”,它提供了一个文本缓冲区内带电更换的Emacs Lisp表达式。这是一个整洁的黑客。

+0

这真的很棒谢谢 – justinhj 2010-06-15 04:23:08

+0

是的,这很酷。 – kjfletch 2010-06-17 08:20:43

2

replace-regex函数可以执行lisp来生成替换。你可以匹配“(。+)”并替换为“\,(eval(阅读\ &)”)。在一个普通的情况下,如果sexp在单行上,并且是唯一包含括号的事情, )”。

2

如果您使用的是技术人员使用的emacs入门工具包,那么会有“esk-eval-and-replace”函数来评估elisp sexp并将其替换。它默认绑定到C-c e

相关问题