在 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-key
和 local-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 中取消设置键绑定的主要内容,如果未能解决你的问题,请参考以下文章