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)
是较短的版本。