【问题标题】:Clear a keymap for a mode清除模式的键盘映射
【发布时间】:2021-01-25 12:08:47
【问题描述】:

有时我需要重新定义一个模式的整个地图。这意味着我对默认绑定不感兴趣,不希望在未分配重新映射时意外使用某些默认键绑定。

例如,我将dired-mode-map定义为

(evil-define-key 'normal dired-mode-map
   ....

如何在映射我自己的之前清除所有默认键绑定?

【问题讨论】:

  • (setq dired-mode-map (make-keymap)) 应该这样做,不是吗?
  • 不,不幸的是,与 logscia 的解决方案一样:Wrong type argument: keymapp, nil
  • 在尝试这样的事情时确保从emacs -Q(没有初始化文件)开始。如果您没有看到与 emacs -Q 相同的问题行为,那么将您的 init 文件一分为二以找出罪魁祸首。
  • 如果您打开 debug-on-error 然后发布回溯,将会有所帮助。您报告的错误可能有多种原因(包括 @Drew 建议的 init 文件中的用户错误)。

标签: emacs key-bindings


【解决方案1】:

这似乎有效:

(setcdr dired-mode-map (cdr (make-keymap)))
(set-keymap-parent dired-mode-map special-mode-map)

也就是说,它创建一个新的空键映射并用它替换dired-mode-map 的内容。它恰好可以工作,因为 keymap 是一个列表,其 car 只是符号 keymap,所以 cdr 是所有需要更改的。

【讨论】:

  • 当我这样做时,当我调用dired-jump 时,我会在fundamental-mode 缓冲区中得到easy-menu-get-map: Wrong type argument: keymapp, nil
  • 但是(make-keymap)返回一个列表,其中car是符号keymap,所以替换cdr是错误的。我相信@Drew 在评论中说得对。
猜你喜欢
  • 2015-03-09
  • 2011-11-27
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 2023-03-27
  • 2011-01-14
相关资源
最近更新 更多