我正在尝试重新定义用于导航历史记录的键,这些键用于接受正则表达式并提供C-p / C-n历史导航的几个命令。除了C-p / C-n之外,我还想使用其他键。例如,当使用发生或 replace-regexp 时,可以使用C-p和C-n转到上一个和下一个元素。
我尝试了几件事,但无法使其发挥作用。我想我在这里错过了“大局”。
我需要修改哪种模式图,何时以及如何修改?我试过的一切都失败了。
P.S:请注意,我已经拥有了自己的次要模式,并在此处提供了我的所有键盘映射。
答案 0 :(得分:5)
我假设你只需要minibuffer-local-map
。使用先前分配给该键映射的键的后续定义将胜过先前的定义。要禁用先前的键分配,只需创建一个新定义并将最后一部分设置为nil
而不是'function-name
。
(define-key minibuffer-local-map (kbd "<f6>") 'help-for-help)
以下摘录自Emacs Trunk .../lisp/bindings.el
:
(let ((map minibuffer-local-map))
(define-key map "\en" 'next-history-element)
(define-key map [next] 'next-history-element)
(define-key map [down] 'next-history-element)
(define-key map [XF86Forward] 'next-history-element)
(define-key map "\ep" 'previous-history-element)
(define-key map [prior] 'previous-history-element)
(define-key map [up] 'previous-history-element)
(define-key map [XF86Back] 'previous-history-element)
(define-key map "\es" 'next-matching-history-element)
(define-key map "\er" 'previous-matching-history-element)
;; Override the global binding (which calls indent-relative via
;; indent-for-tab-command). The alignment that indent-relative tries to
;; do doesn't make much sense here since the prompt messes it up.
(define-key map "\t" 'self-insert-command)
(define-key map [C-tab] 'file-cache-minibuffer-complete))
答案 1 :(得分:5)
添加@lawlist所说的内容(用于绑定minibuffer-local-map
中的密钥):
有多个迷你缓冲区键盘映射,具体取决于迷你缓冲区中读取的内容以及方式。您可能想要使用哪些键盘映射可能取决于您使用的Emacs版本。
此外,还有与缓冲区*Completions*
进行交互的键盘映射:completion-list-mode-map
。
要在迷你缓冲区中完成,主键映射为minibuffer-local-completion-map
。
以下是迷你缓冲区键盘列表。其中一些可能在您的Emacs版本中不可用(使用)。
minibuffer-local-map
minibuffer-local-ns-map
minibuffer-local-isearch-map
minibuffer-local-completion-map
minibuffer-local-must-match-map
minibuffer-local-filename-completion-map
minibuffer-local-filename-must-match-map
minibuffer-local-must-match-filename-map
此外,您可以使用minibuffer-with-setup-hook
(或minibuffer-setup-hook
直接)动态添加键绑定,持续一次迷你缓冲区读取。
我将添加此信息,因为在您操作迷你缓冲区键盘图时它非常有用:您可以使用库help-fns+.el
中的C-h M-k
(命令describe-keymap
)来查看所有信息以人类可读的形式给出一个迷你缓冲键映射的绑定。