Bạn có thể xác định chế độ phụ của riêng mình và bản đồ chính của nó và có chế độ ghi đè tất cả các chế độ khác (phụ + chính). Đó chính xác là lý do tại sao tôi chọn viết chế độ nhỏ của riêng mình.
Các bước để có các ràng buộc chính của bạn ghi đè tất cả các ràng buộc:
- Xác định chế độ nhỏ của riêng bạn và bản đồ chính như dưới đây.
- Kích hoạt chế độ nhỏ của bạn trên toàn cầu
(define-key my-mode-map (kbd "C-j") #'newline-and-indent)
Tương tự, các ràng buộc khóa khác của bạn được đặt trong chế độ nhỏ của bạn sẽ ghi đè lên các ràng buộc trong các chế độ khác.
Tôi đặc biệt khuyên bạn nên đọc bài đăng trên blog của Christopher Wellons về cách viết một chế độ nhỏ. Blog đó cộng với sự khó chịu khi phải đặt nhiều ràng buộc chính nil
ở nhiều chế độ chính và phụ đã thôi thúc tôi viết chế độ nhỏ của riêng mình.
Phần tốt nhất của việc sử dụng phương pháp này là khi bạn muốn kiểm tra các ràng buộc chính làm gì trong cấu hình mặc định của emacs, bạn chỉ cần tắt chế độ nhỏ của mình; sau đó bạn bật lại và bạn lấy lại các ràng buộc khóa tùy chỉnh của mình.
;; 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/