在emacs中,如何顯示當前緩衝區的陰影/重寫鍵綁定? 運行時不會顯示describe-bindings
(C-h b
)。如何顯示重寫/隱藏的密鑰綁定?
換句話說:如何查看緩衝區中活動的模式是否存在衝突的鍵綁定?
在emacs中,如何顯示當前緩衝區的陰影/重寫鍵綁定? 運行時不會顯示describe-bindings
(C-h b
)。如何顯示重寫/隱藏的密鑰綁定?
換句話說:如何查看緩衝區中活動的模式是否存在衝突的鍵綁定?
只需撥打describe-mode
:章米
大多數模式文檔字符串中會顯示他們的鍵盤映射,以及用於在這裏列出它們的方法還會告訴您綁定是否被遮蔽。
它不會告訴你它是由陰影,但當然這是微不足道的檢查與C-Hç或C-Hķ。
例如爲:
key binding
--- -------
[...]
C-M-q indent-sexp
(that binding is currently shadowed by another mode)
通過其處理當documentation
功能被稱爲模式文檔字符串的函數生成substitute-command-keys
該文本。
例如:
(substitute-command-keys "\\{lisp-interaction-mode-map}")
以下函數也可以是有用:
(key-binding KEY &optional ACCEPT-DEFAULT NO-REMAP POSITION) ;; dominant binding
(global-key-binding KEYS &optional ACCEPT-DEFAULT)
(local-key-binding KEYS &optional ACCEPT-DEFAULT)
(minor-mode-key-binding KEY &optional ACCEPT-DEFAULT) ;; discover keymap(s)
爲它赫克我這樣做:
(define-key c++-mode-map "\C-c\C-s" 'kaw-sort-projects)
,然後做C-H B(見綁定)。並得到了這個輸出:
Major Mode Bindings:
key binding
--- -------
C-c C-q c-indent-defun
C-c C-s kaw-sort-projects
C-c C-u c-up-conditional
C-c C-w subword-mode
所以它似乎顯示出來。
這是你的意思嗎?
創造了這個功能,讓你以前的值當你定義一個關鍵
(defun define-key-warn (map key fxn)
"Bind a key and give info message if already bound"
(setq old-fxn (lookup-key map key))
(if old-fxn
(message "INFO: key %s was defined as %s" key old-fxn))
(define-key map key fxn)
)
我想一個解決方法是使用一個較小的模式像在http://stackoverflow.com/a/683575/789593,並在關閉次要模式時查看特定鍵是否有另一個命令。更糟糕的做法可能是使用'emacs -q'啓動Emacs,以查看配置中的密鑰是否在沒有配置的情況下具有另一個綁定。 –
不幸的是,這並沒有解決次要模式衝突的問題:你必須單獨測試每一對可能的次要模式。 – Norswap