読者です 読者をやめる 読者になる 読者になる

S式を評価した結果でS式自体を置換したいときには

Emacs にはカーソル直前のS式を評価するためのコマンド eval-last-sexp が存在する. その他,eval-expressioneval-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 という評価結果で置き換わるというわけである. なかなかうまい発想だと思った.

参考