在 emacs 中取消设置键绑定

Posted

技术标签:

【中文标题】在 emacs 中取消设置键绑定【英文标题】:Unset key binding in emacs 【发布时间】:2012-12-07 14:33:54 【问题描述】:

例如,在zen-coding的代码中,“C-j”隐藏了“C-j”的正常行为(newline-and-indent

(define-key zencoding-mode-keymap (kbd "C-j") 'zencoding-expand-line)

那我怎样才能取消这个键绑定并再次将C-j 用于newline-and-indent

我试过了,但它不起作用:

(add-hook 'html-mode-hook
          (lambda ()
            (progn
              (zencoding-mode)
              (local-set-key (kbd "C-j") 'newline-and-indent))))

有人对此有想法吗?

【问题讨论】:

有人知道为什么add-hook 在这种情况下不起作用吗? Nayefc:该代码不会影响 zencoding-mode 的键盘映射,因为 zencoding-mode 是次要模式,并且(根据下面的答案)local-set-key 会影响主要模式的键盘映射。次要模式键盘映射优先于主要模式键盘映射,因此继续使用未修改的 zencoding-mode 绑定。 【参考方案1】:

解除键绑定(对于任何键映射)的一般方法是定义nil的绑定:

(define-key KEYMAP KEY nil)

为方便起见,还有两个标准函数用于从全局键映射和本地键映射(通常主要模式的键映射)解除绑定。

(global-unset-key KEY) (local-unset-key KEY)

这些是交互式命令,根据它们各自的补充 global-set-keylocal-set-key

至于你的具体例子,你可能想要这样的东西:

(eval-after-load "zencoding-mode"
  '(define-key zencoding-mode-keymap (kbd "C-j") nil))

【讨论】:

我想说的完美答案。 也许这应该是一个完整的问题,但是如果我还不知道它是什么,那么有什么好方法可以找出键盘映射的名称? @SamuelEdwinWard 使用 C-h k ,然后键入键绑定 塞缪尔·埃德温·沃德:见emacs.stackexchange.com/questions/653/… @Hi-Angel Emacs 可能正在向您展示M-DEL (translated from <M-backspace>),不是吗? diff-mode-map 绑定适用于 M-DEL 而不是 <M-backspace>(后者在 diff-mode-map 被查看之前已被翻译)。

以上是关于在 emacs 中取消设置键绑定的主要内容,如果未能解决你的问题,请参考以下文章

绑定键以增加/减少emacs中的字体大小

在 emacs 中定义键绑定

使用邪恶键绑定时,emacs 中的 Ctrl+U

emacs smartscan 更改键绑定

Emacs Chrome键绑定

Mac OS X Leopard 上的 Emacs 键绑定