Nói chung, điều đó là không thể.
Lý do là có thể có một số bản đồ xác định cùng một ràng buộc và không có cách nào để tự động tìm ra cái nào bạn muốn. (trong ví dụ của bạn, elisp-slime-nav-mode
là một chế độ nhỏ như vậy). Vì vậy, cách tiếp cận thực sự đáng tin cậy duy nhất là để bạn tìm ra chính xác định nghĩa bạn muốn.
Điều đó nói rằng ... có một khả năng hack (không phải lúc nào cũng có ...) Một phần trong những điều khiến nó khó hiểu là ràng buộc mà bạn muốn ánh xạ lại có khả năng bị che dấu bởi một sơ đồ hoạt động xấu, do đó có được ràng buộc hiện tại của M-.
là vô dụng
(defun lookup-no-evil (key)
;; excluding evil maps from the lookup. not sure if
;; anything more than evail-normal-state-map is needed
(let* ((evil-maps (list evil-normal-state-map))
(bindings
(remq nil
(mapcar
(lambda (map)
(unless (memq map evil-maps)
(lookup-key map key)))
(current-active-maps)))))
(when bindings
;; let's assume the first one is the right one.
;; Given that minor modes are at the beginning
;; (although this is *not* documented so should not
;; be relied upon), it might be what we would have
;;without evil-mode indeed
(car bindings))))
(defmacro evil-remap (from to)
;; assuming that we want to put it in the normal-state map.
;; not sure about that
`(define-key evil-normal-state-map ,to
(lambda ()
(interactive)
(call-interactively (lookup-no-evil ,from)))))
(evil-remap (kbd "M-.") (kbd "C-]"))
Tôi thường không sử dụng cái ác nào cả, vì vậy có thể cần điều chỉnh (xem bình luận được nhúng)
Ngoài ra, một cách tiếp cận sạch hơn sẽ là tìm kiếm các liên kết một lần (ví dụ trong móc chế độ), thay vì tìm kiếm động mỗi khi nhấn phím. Nhưng tôi không chắc nên sử dụng hook hook ác nào, vì vậy đây là một bài tập;) (và tùy thuộc vào thứ tự bạn sử dụng cho các chế độ nhỏ của mình hoặc nếu bạn chuyển đổi chúng một cách linh hoạt, nó có thể không chính xác)