bind-map 是一個提供巨集bind-map
Emacs 包,它可用於使鍵盤映射在不同的「引導鍵」(包括與邪惡狀態相關的鍵)上可用。它本質上是 vim 或 Emacs 邪惡領導者套件中使用的領導者密鑰概念的概括,並允許任意數量的「領導者密鑰」。這可能最好用一個例子來解釋。
(bind-map my-base-leader-map
:keys ( " M-m " )
:evil-keys ( " SPC " )
:evil-states (normal motion visual))
(bind-map my-elisp-map
:keys ( " M-m m " " M-RET " )
:evil-keys ( " SPC m " " , " )
:major-modes ( emacs-lisp-mode
lisp-interaction-mode))
這將使my-base-leader-map
(如果尚未定義,則自動建立地圖)在前綴(或領導者) Mm
和SPC
下可用,其中後者僅綁定在邪惡的正常、運動或視覺狀態下。當指定的主要模式之一處於活動狀態時,第二個聲明使my-elisp-map
在指定的鍵下可用。在第二種情況下,使用的邪惡狀態也是正常運動和視覺,因為這是在bind-map-default-evil-states
中指定的預設狀態。可以使綁定以載入的次要模式或主要和次要模式的混合為條件。由於使用了模式的符號,因此不必確保在此聲明之前加載任何模式的套件。有關更多選項,請參閱bind-map
的文檔字串。
只有當指定了與邪惡相關的關鍵字之一時,此套件才會使用邪惡。例如,這個聲明沒有使用邪惡包。
(bind-map my-elisp-map
:keys ( " M-m m " " M-RET " )
:major-modes ( emacs-lisp-mode
lisp-interaction-mode))
這個包背後的想法是,您希望在一系列與內建模式映射分開的鍵盤映射中組織您的個人綁定。例如,您可以簡單地使用內建的define-key
將鍵新增到my-elisp-map
中,像上面這樣的聲明將負責確保這些綁定在正確的位置可用。
您可以使用內建的define-key
,它將按預期運行。 bind-key
(使用包的一部分)是另一種選擇。對於想要不同介面的人,您可以在bind-map
巨集中使用:bindings
關鍵字,或使用提供的兩個函數bind-map-set-keys
和bind-map-set-key-defaults
,它們都只使用define-key
內部,但允許多個綁定,無需太多語法。
(bind-map my-base-leader-map
:keys ( " M-m " )
:evil-keys ( " SPC " )
:evil-states (normal motion visual)
:bindings ( " c " 'compile
" C " 'check ))
(bind-map-set-keys my-base-leader-map
" c " 'compile
" C " 'check
; ; ...
)
; ; is the same as
; ; (define-key my-base-leader-map (kbd "c") 'compile)
; ; (define-key my-base-leader-map (kbd "C") 'check)
; ; ...
(bind-map-set-key-defaults my-base-leader-map
" c " 'compile
; ; ...
)
; ; is the same as
; ; (unless (lookup-key my-base-leader-map (kbd "c"))
; ; (define-key my-base-leader-map (kbd "c") 'compile))
; ; ...
第二個函數僅在該鍵不存在現有綁定時新增綁定。它可能只對共用配置有用,在共用配置中您想要提供預設綁定,但不希望該綁定覆蓋使用者建立的綁定。請注意,這兩個函數中的鍵都是在綁定它們之前傳遞給kbd
的字串。
如果您使用多個bind-map
聲明,您可能會發現自己重複諸如:evil-keys
和:evil-states
之類的屬性。您可以使用bind-map-for-mode-inherit
自動從父映射中提取這些屬性,如下例所示。請參閱文件字串以取得更多資訊。
(bind-map my-leader-map
:keys ( " M-m " )
:evil-keys ( " SPC " )
:evil-states (normal motion visual))
(bind-map-for-mode-inherit my-markdown-map my-leader-map
:major-modes ( markdown-mode ))