13

在 emacs 中,如何显示当前缓冲区的阴影/覆盖键绑定?它们在运行时不会出现describe-bindings( C-h b)。

换句话说:如何查看缓冲区中活动的模式是否具有冲突的键绑定?

4

2 回答 2

11

只需致电describe-modeC-hm

大多数模式文档字符串将显示它们的键映射,并且用于在此处列出它们的方法还会告诉您绑定是否被隐藏。

它不会告诉你它被什么遮蔽了,但是用C-hcor来检查当然是微不足道的C-hk

例如:

key             binding
---             -------
[...]
C-M-q           indent-sexp
  (that binding is currently shadowed by another mode)

该文本由在调用该函数substitute-command-keys时处理模式文档字符串的函数生成documentation

例如:

(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)
于 2012-12-20T21:08:20.400 回答
0

为了它,我这样做了:

(define-key c++-mode-map "\C-c\C-s" 'kaw-sort-projects)

然后做了 Ch 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)
)
于 2012-12-20T13:11:14.953 回答