我知道,我可以使用unbind-key
取消绑定密钥。在这种情况下,我必须知道我要取消绑定的密钥。但我不知道关键。我只想取消绑定some-mode-map
的所有键。我不想覆盖它们,我只想取消绑定它们然后在some-mode-map
中定义我自己的键。我知道我可以迭代some-mode-map
并应用unbind-key
,但是可能有更简单的解决方案吗?我不知道如何迭代keymap
。
更新
通过这种方式尝试(正如phils在评论中所建议的那样)并且它不起作用:
(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-mode-map
仍未清除。并且根据包配置顺序,evil
绑定会被覆盖。除非我重新定义neotree-mode-map
,否则它不会。我知道我可以使用evil-define-key
获得所需的结果,但我想将包特定的设置保存在自己的配置文件中。如果我使用evil-define-key
,neotree
关键约束定义将位于setup-evil.el
而非setup-neotree.el
更新2
Answer和(setq neotree-mode-map (make-sparse-keymap))
一样有用。
但似乎neotree-mode-map
有父地图,这就是为什么一些键绑定在“清理”之后“回来”的原因。
我想到的另一件事是,evil
将一些额外信息置于重写地图上。
(keymap
...
(override-state . all)
...
)
这就是为什么我应该在evil
配置之前清除地图。
答案 0 :(得分:2)
您可以使用以下内容删除键映射中的所有绑定:
(setf (cdr <keymap>) nil)
我认为在实践中它很少真正做到你想要的,因为你会发现一些你没有意识到的有用的绑定(例如那些与菜单栏条目相对应的绑定),但你得到了你所要求的。
对于迭代键映射,您可以使用map-keymap
。