nic*_*lai 4 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)))
)
Run Code Online (Sandbox Code Playgroud)
neotree-mode-map仍然没有清理干净。并且根据包配置顺序,evil绑定被覆盖。除非我重新定义,否则不会neotree-mode-map。我知道我可以用 获得想要的结果evil-define-key,但我想在它自己的配置文件中保留包特定的设置。如果我使用evil-define-key,neotree键绑定定义将在setup-evil.el而不在setup-neotree.el
更新 2
答案有效,就像(setq neotree-mode-map (make-sparse-keymap))。但它似乎neotree-mode-map有父映射,这就是为什么一些键绑定在“清理”后“回来”的原因。我发现的另一件事是,evil将一些额外信息放入覆盖地图中。
(keymap
...
(override-state . all)
...
)
Run Code Online (Sandbox Code Playgroud)
这就是为什么我应该在evil配置之前清除地图。
您可以使用以下命令清除键映射中的所有绑定:
(setf (cdr <keymap>) nil)
Run Code Online (Sandbox Code Playgroud)
我认为在实践中它很少真正做到你想要的,因为会有一些你没有意识到有用的绑定(例如那些对应于菜单栏条目的绑定),但是你得到了你想要的。
至于迭代键映射,您可以使用map-keymap它。