7

当在几个接受正则表达式并提供 Cp / Cn 历史导航的命令中时,我试图重新定义用于导航历史的键。除了 Cp / Cn 之外,我还想使用其他键。例如,当使用发生替换正则表达式时,可以使用 Cp 和 Cn 转到上一个和下一个元素。

我已经尝试了几件事,但无法使其工作。我想我在这里错过了“大局”。

我需要修改哪个模式映射,何时以及如何修改?我尝试的一切都失败了。

PS:请注意,按照此处的建议,我有自己的次要模式和所有键盘映射。

4

2 回答 2

6

添加到@lawlist 所说的内容(即绑定密钥minibuffer-local-map):

有多个 minibuffer 键映射,具体取决于 minibuffer 中读取的内容以及方式。您可能想要使用哪些键盘映射取决于您使用的 Emacs 版本。

此外,还有与缓冲区交互的键映射*Completions*completion-list-mode-map

为了在 minibuffer 中完成,主键映射是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直接)在单个 minibuffer 读取期间动态添加键绑定。

我将添加此信息,因为它在您操作 minibuffer 键映射时非常有用:您可以使用C-h M-k(command describe-keymap) from libraryhelp-fns+.el以人类可读的形式查看给定 minibuffer 键映射的所有绑定。

于 2013-11-03T23:22:10.067 回答
6

我假设你只是需要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))
于 2013-11-03T22:38:01.093 回答