Emacs:解除某些模式映射的所有键的绑定

Emacs:解除某些模式映射的所有键的绑定,emacs,key-bindings,Emacs,Key Bindings,我知道,我可以使用unbind key解除键绑定。在这种情况下,我必须知道我要解开的钥匙。但我不知道钥匙。我只想解开某个模式映射的所有键。我不想覆盖它们,我只想解除它们的绑定,然后在some mode map中定义我自己的键。我知道我可以迭代一些模式映射并应用解除绑定键,但可能有更简单的解决方案吗?我不知道如何迭代keymap 更新 尝试过(如评论中所建议的)这种方式,但不起作用: (use-package neotree :config (setq neotree-mode-map (

我知道,我可以使用
unbind key
解除键绑定。在这种情况下,我必须知道我要解开的钥匙。但我不知道钥匙。我只想解开
某个模式映射的所有键
。我不想覆盖它们,我只想解除它们的绑定,然后在
some mode map
中定义我自己的键。我知道我可以迭代
一些模式映射
并应用
解除绑定键
,但可能有更简单的解决方案吗?我不知道如何迭代
keymap

更新

尝试过(如评论中所建议的)这种方式,但不起作用:

(use-package neotree
  :config
  (setq neotree-mode-map (make-sparse-keymap))
  (define-key neotree-mode-map (kbd "RET") 'neotree-enter)
)
(use-package evil
  :init
  (setq evil-overriding-maps '((neotree-mode-map)))
)

neotree模式映射保持未清理状态。根据包配置顺序,
evil
绑定被覆盖。除非我重新定义
neotree模式映射
,否则它不会。我知道我可以使用
evil define key
获得所需的结果,但我希望在自己的配置文件中保留特定于包的设置。如果我使用
evil define key
neotree
密钥绑定定义将在
setup evil.el
中,而不是在
setup neotree.el

更新2

工作原理与
(setq neotree模式映射(生成稀疏键映射))
相同。
但是,
neotree模式映射
似乎有父映射,这就是为什么一些键绑定在“清理”之后“返回”的原因。 我发现的另一件事是,
evil
在覆盖映射中添加了一些额外的信息

(keymap 
... 
(override-state . all) 
...
)

这就是为什么我应该在
evil
configuration之前清除map。

您可以使用以下命令清除keymap中的所有绑定:

(setf (cdr <keymap>) nil)
(setf(cdr)无)
我认为在实践中,它很少真正做到你想要的,因为有些绑定你没有意识到是有用的(例如,那些对应于菜单栏条目的绑定),但是你得到了你想要的


至于迭代键映射,您可以使用
map-keymap

一个几乎重复的键映射,您确定
neotree-mode-map
保持未清除状态吗?或者您已经正确地重新定义了该变量,但现有代码仍然指向它以前的值(一个键映射,即列表),而不是该变量?关于这一点,
C-h v neotree模式图告诉您什么?(或使用库中的
C-h M-k
Descripte keymap
)获取人类可读的keymap绑定列表。)
neotree模式映射的值为:
值:(keymap(override state.all)(13.neotree enter)keymap(103.还原缓冲区)(60.缓冲区开始)(62.缓冲区结束)(104.描述模式)(63.描述模式)(127.向下滚动命令)(33554464.向下滚动命令)…(45.否定参数)(重新映射键映射(自插入命令.未定义))
(setcdr nil)
是较短的版本。