我在临时缓冲区中编程很多,而且我经常在某一点评估某个表达式,并且想在其他地方评估相同的表达式(无需为其编写函数)。
一个例子是当我想测试(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
)
答案 0 :(得分: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>")
您有两个宏f9
和f9e
。 f9e
与f9
类似
它显示了迷你缓冲区的返回值。在你的情况下,你评估
(f9e (looking-at "\\<"))
现在每次按 f9 时都会评估表单。
您可能希望查看我的emacs配置here,其中我有几个宏或多或少做同样的事情。
答案 1 :(得分:3)
您可能希望使用绑定到M-:
密钥的命令。