11

我正在尝试从我的 elisp 函数中获得动态提示。我想要像 replace-regexp 这样的东西,它会显示你最后输入的正则表达式。我试过(交互式(concat“sab”“bab”)))不起作用!

我也尝试过类似格式的消息(交互式“s %s”last-used-regexp)

那是行不通的!有人知道怎么做吗?

谢谢!

4

2 回答 2

15

M-x find-function是你的朋友。它将通过向您展示源代码来告诉您 emacs 中的任何内容是如何工作的。使用它,我发现query-regexp-replace调用query-replace-read-argswhich calls query-replace-read-fromwhich callsread-from-minibuffer使用从上次使用的正则表达式创建的提示,该提示保存在 dotted pairquery-replace-defaults中。

所以:

(defun my-func ()
  "Do stuff..."
  (interactive)
  (read-from-minibuffer "Regexp? " (first query-replace-defaults)))

是一个以最后输入的正则表达式作为默认值的提示的命令。

于 2009-04-16T01:42:50.613 回答
9

使用变量作为输入历史,并与列表交互:

(defvar my-func-history nil)

(defun my-func (str)
  (interactive (list (read-from-minibuffer "Input string: " (car my-func-history) nil nil 'my-func-history)))
  (insert str))

如果您最初不想在其中输入最后一个值,请将 更改(car my-func-history)nil。您当然可以向上/向下箭头在提示符处浏览历史记录。

于 2009-04-16T03:00:07.857 回答