Emacs 默认有一个输入记录, 比如在 minibuffer 或者 eshell 按键 M-n/M-p 就可以填入之前的记录.
比如之前的输入记录有以下:
A: aaa
B: bbb
C: ccc
其中 A 记录是最新的, 常规的 M-p 只能从 A → B → C 顺序访问.
是否可以当我输入 c 后 M-p 直接匹配存在 c 开头的最近记录?
Emacs 默认有一个输入记录, 比如在 minibuffer 或者 eshell 按键 M-n/M-p 就可以填入之前的记录.
比如之前的输入记录有以下:
A: aaa
B: bbb
C: ccc
其中 A 记录是最新的, 常规的 M-p 只能从 A → B → C 顺序访问.
是否可以当我输入 c 后 M-p 直接匹配存在 c 开头的最近记录?
consult-M-x的默认行为是这样的,原版的话只能手动改补全后端了吧,不知道有没有配置项。
试试 M-r ? 可以输入一些关键字,查找输入记录。
我是这么发现快捷键的:
C-h k(describe-key),然后输入 M-p 看看它执行的函数是什么(previous-history-element N),这样我知道可能有一些 previous-hisotry- 相关的函数C-h f(describe-function),输入 previous-hisotry-, 我就发现了 (previous-matching-history-element REGEXP N) 然后看到它绑定在了 M-r 上。(defun my-insert-candidate (cands &optional preinput)
"Select item from CANDS,delete things and insert item."
(let* ((choice
(completing-read "History: " cands nil t preinput)))
(delete-region (line-beginning-position) (point))
(insert choice)))
(defun my-select-from-minibuffer-history ()
"Select an item from minibuffer history using `completing-read`."
(interactive)
(my-insert-candidate minibuffer-history (minibuffer-contents-no-properties)))
(keymap-set minibuffer-local-map "C-r" 'my-select-from-minibuffer-history)
我自己搞得一个trivial的实现