คุณสามารถกำหนดโหมดรองของคุณเองและแผนที่ที่สำคัญและมีที่แทนที่โหมดอื่น ๆ ทั้งหมด (เล็กน้อย + ที่สำคัญ) นั่นเป็นเหตุผลที่ฉันเลือกที่จะเขียนโหมดรองของตัวเอง
ขั้นตอนในการผูกการคีย์ของคุณจะแทนที่การโยงทั้งหมด:
- การกำหนดโหมดย่อยและแผนที่หลักของคุณเองดังแสดงด้านล่าง
- เปิดใช้งานโหมดย่อยของคุณทั่วโลก
(define-key my-mode-map (kbd "C-j") #'newline-and-indent)
ในทำนองเดียวกันการเชื่อมโยงคีย์อื่น ๆ ของคุณที่ตั้งค่าในโหมดรองของคุณจะแทนที่สิ่งเหล่านั้นในโหมดอื่น ๆ
ฉันขอแนะนำให้อ่านโพสต์บล็อกโดย Christopher Wellons เกี่ยวกับวิธีการเขียนโหมดรอง บล็อกนั้นบวกกับความยุ่งยากในการตั้งค่าการเชื่อมโยงคีย์nil
หลาย ๆ แบบในโหมดหลักและรองหลาย ๆ โหมดเป็นแรงบันดาลใจให้ฉันเขียนโหมดรองของตัวเอง
ส่วนที่ดีที่สุดของการใช้วิธีนี้คือเมื่อคุณต้องการตรวจสอบว่าการเชื่อมโยงคีย์ทำอะไรในการกำหนดค่าเริ่มต้นของ emacs คุณเพียงปิดโหมดรอง จากนั้นคุณเปิดใช้งานอีกครั้งและคุณจะได้รับการเชื่อมโยงคีย์แบบกำหนดเองของคุณ
;; Main use is to have my key bindings have the highest priority
;; https://github.com/kaushalmodi/.emacs.d/blob/master/elisp/modi-mode.el
(defvar my-mode-map (make-sparse-keymap)
"Keymap for `my-mode'.")
;;;###autoload
(define-minor-mode my-mode
"A minor mode so that my key settings override annoying major modes."
;; If init-value is not set to t, this mode does not get enabled in
;; `fundamental-mode' buffers even after doing \"(global-my-mode 1)\".
;; More info: http://emacs.stackexchange.com/q/16693/115
:init-value t
:lighter " my-mode"
:keymap my-mode-map)
;;;###autoload
(define-globalized-minor-mode global-my-mode my-mode my-mode)
;; https://github.com/jwiegley/use-package/blob/master/bind-key.el
;; The keymaps in `emulation-mode-map-alists' take precedence over
;; `minor-mode-map-alist'
(add-to-list 'emulation-mode-map-alists `((my-mode . ,my-mode-map)))
;; Turn off the minor mode in the minibuffer
(defun turn-off-my-mode ()
"Turn off my-mode."
(my-mode -1))
(add-hook 'minibuffer-setup-hook #'turn-off-my-mode)
(provide 'my-mode)
;; Minor mode tutorial: http://nullprogram.com/blog/2013/02/06/