在评估带有(eval-last-sexp)的elisp符号表达式时,绑定到C-x C-e,我可以在该命令之前键入C-u,将表达式的结果插入当前缓冲区。
交互式调用函数时是否有相同的功能?例如,如果我想将(emacs-version)返回的字符串插入当前缓冲区,我该怎么做? M-x emacs-version只显示迷你缓冲区中的字符串,并在M-x emacs-version之前输入C-u也不起作用。
如果没有这样的等价物,那么插入函数返回的字符串最简单的方法是什么,而不必在评估函数之前先键入函数?
更新:
C-u M-x emacs-version 确实实际上有效。我的错。但它不适用于emacs-uptime。怎么会对那个不起作用?
答案 0 :(得分:3)
(defun my-insert-command-value (command)
"Insert the return value of the command."
(interactive "*C(insert) M-x ")
(print (call-interactively command) (current-buffer)))
答案 1 :(得分:2)
emacs-uptime
已实施,仅将结果输出到迷你缓冲区
(defun emacs-uptime (&optional format)
(interactive)
(let ((str
(format-seconds (or format "%Y, %D, %H, %M, %z%S")
(float-time
(time-subtract (current-time) before-init-time)))))
(if (called-interactively-p 'interactive)
(message "%s" str)
str)))
emacs-version
具有以下代码,如果使用C-u
(if here
(insert version-string)
(if (called-interactively-p 'interactive)
(message "%s" version-string)
version-string))
如果要打印特定命令的结果(例如emacs-uptime
),可以将其包装到insert
结果到当前缓冲区(类似于emacs-version
)。
但是,我不知道通用解决方案 - 如何输出任何Emacs命令的结果。
答案 2 :(得分:0)
C-u M-x pp-eval-expression RET (emacs-uptime) RET
“评估Emacs-Lisp sexp EXPRESSION,并打印其值。 使用前缀arg,将值插入到当前缓冲区中。 使用负前缀arg,如果值是字符串,则插入它 进入缓冲区而没有双引号(“”)。“
请参阅pp+.el。