2

我在暂存缓冲区中进行了很多编程,并且经常在某一点评估某个表达式,并希望在其他地方评估相同的表达式(无需为其编写函数)。

一个例子是当我想测试(looking-at "\\<")时,看看我是否在看一个单词的开头。使用eval-last-sexp它时会评估之前的东西(point)

所以,这意味着我可以测试:

(looking-at "\\<")<(point)>someword

但是我之前无法测试表达式(point)

someword<(point)>(looking-at "\\<")

为了测试这一点,我实际上做了类似的事情:

(defun foo ()
  (interactive)
  (when (looking-at "\\<") (message "t"))
)

然后在其他地方调用它(有时,当我进行大量测试时,我什至会将它绑定到一个键)。

实际上不难想出“行为如何(looking-at)”的答案,但我感兴趣的问题是是否可以存储在the-last-user-called-sexp某个地方,以便可以通过使用类似的函数在缓冲区中的其他地方调用它:

(defun invoke-last-sexp (sexp)
 (interactive)
 (evaluate the last sexp) ; maybe even (call-interactively) is sometimes needed
)
4

2 回答 2

3

无论我身在何处,我都希望能够快速评估表单。为此,我有一个受 magnars配置启发的宏。

(defmacro create-simple-keybinding-command (name key)
  `(progn (defmacro ,name (&rest fns)
            (list 'global-set-key (kbd ,key)
                  `(lambda ()
                     (interactive)
                     ,@fns)))

          (defmacro ,(intern (concat (symbol-name name) "e")) (&rest fns)
            (list 'global-set-key (kbd ,key)
                  `(lambda ()
                     (interactive)
                     (message "%s"
                              (progn
                                ,@fns)))))))

例如,您评估

(create-simple-keybinding-command f9 "<f9>")

你有两个宏f9f9e. f9e就像f9它在 minibuffer 中显示返回值。在你的情况下,你评估

(f9e (looking-at "\\<"))

现在,每次按 时都会评估表单f9

您可能想在这里查看我的 emacs 配置,其中我有几个宏或多或少地做同样的事情。

于 2013-01-13T00:09:18.577 回答
3

您可能希望使用绑定到M-:键的命令。

于 2013-01-13T01:29:26.147 回答