【问题标题】:Unset key binding in emacs在 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 绑定。

标签: emacs elisp emmet


【解决方案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 被查看之前已被翻译)。
猜你喜欢
  • 2010-11-27
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多