28

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

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

那么我怎样才能取消设置这个键绑定并再次使用C-jnewline-and-indent

我试过这个,但它不起作用:

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

有人对此有想法吗?

4

1 回答 1

47

取消绑定键(对于任何键映射)的一般方法是定义以下绑定nil

(define-key KEYMAP KEY nil)

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

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

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

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

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

为了其他尝试做类似事情的读者的利益,这些参数是"zencoding-mode"因为正在加载的库名为 zencoding-mode.el(请注意,您应该省略“.el”后缀);而zencoding-mode-keymap不是典型的/预期的zencoding-mode-map,因为 zencoding-mode.el 在显式声明其键盘映射而不使用标准名称方面是不寻常的。

用于C-hk检查有问题的键绑定到什么,Emacs 会告诉你键映射的名称和库的名称,这建立了两个参数。

于 2012-12-20T06:08:38.613 回答