2010-06-14 22 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

相關問題