7

いくつかのコマンド内で正規表現を受け入れ、Cp / Cn 履歴ナビゲーションを提供するときに、履歴をナビゲートするために使用されるキーを再定義しようとしています。Cp/Cn以外のキーも使いたいです。たとえば、occurまたはreplace-regexpを使用する場合、Cp および Cn を使用して前および次の要素に移動できます。

私はいくつかのことを試しましたが、うまくいきません。ここで「全体像」を見逃していると思います。

どのモードマップをいつ、どのように変更する必要がありますか? 私が試したことはすべて失敗しました。

PS:ここでアドバイスされているように、すべてのキーマップを備えた独自のマイナーモードがあることに注意してください。

4

2 に答える 2

6

@lawlist が言ったことに追加するには (キーをバインドすることでしたminibuffer-local-map):

ミニバッファーで何が読み取られ、どのように読み取られるかに応じて、複数のミニバッファー キーマップがあります。また、使用したいキーマップは、使用している Emacs のバージョンによって異なります。

*Completions*さらに、 buffer :と対話するためのキーマップもあります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直接)、1 回のミニバッファー読み取りの間、その場でキー バインドを追加できます。

ミニバッファーのキーマップを操作するときに非常に役立つので、この情報を追加します:ライブラリーのC-h M-k(command ) を使用して、指定されたミニバッファーのキーマップのすべてのバインディングを人間が読める形式で表示できます。describe-keymaphelp-fns+.el

于 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 に答える