Emacs にはカーソル直前のS式を評価するためのコマンド eval-last-sexp
が存在する.
その他,eval-expression
や eval-defun
など,S式を評価するコマンドはいくつか存在する.
S式の評価結果を用いてS式自体を置換してしまう,ということも実は可能だった.
以下の関数を用いる.
(defun eval-and-replace () "Replace the preceding sexp with its value." (interactive) (backward-kill-sexp) (condition-case nil (prin1 (eval (read (current-kill 0))) (current-buffer)) (error (message "Invalid expression") (insert (current-kill 0)))))
例えば (* 128 128)
の末尾で eval-and-replace
を実行すると
このS式自体が 16384
という評価結果で置き換わるというわけである.
なかなかうまい発想だと思った.