Emacs:取消绑定某些模式映射的所有键

时间:2017-08-20 12:39:36

标签: emacs key-bindings

我知道,我可以使用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-keyneotree关键约束定义将位于setup-evil.el而非setup-neotree.el

更新2

Answer(setq neotree-mode-map (make-sparse-keymap))一样有用。 但似乎neotree-mode-map有父地图,这就是为什么一些键绑定在“清理”之后“回来”的原因。 我想到的另一件事是,evil将一些额外信息置于重写地图上。

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

这就是为什么我应该在evil配置之前清除地图。

1 个答案:

答案 0 :(得分:2)

您可以使用以下内容删除键映射中的所有绑定:

(setf (cdr <keymap>) nil)

我认为在实践中它很少真正做到你想要的,因为你会发现一些你没有意识到的有用的绑定(例如那些与菜单栏条目相对应的绑定),但你得到了你所要求的。

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