For example, in the codes of zen-coding, the “C-j” shadows the normal behavior of “C-j” (newline-and-indent)
(define-key zencoding-mode-keymap (kbd "C-j") 'zencoding-expand-line)
Then how can I unset this keybinding and use C-j for newline-and-indent again?
I tried this, but it doesn’t work:
(add-hook 'html-mode-hook
(lambda ()
(progn
(zencoding-mode)
(local-set-key (kbd "C-j") 'newline-and-indent))))
Does anyone have ideas about this?
The general way to unbind a key (for any keymap) is to define a binding of
nil:For convenience, there are also two standard functions for unbinding from the global keymap and from the local keymap (which is usually the major mode’s keymap).
(global-unset-key KEY)(local-unset-key KEY)Those ones are interactive commands, as per their respective complements
global-set-keyandlocal-set-key.As to your specific example, you probably want something like this:
For the benefit of other readers trying to do similar things, those arguments are
"zencoding-mode"because the library being loaded is named zencoding-mode.el (note that you should omit the ".el" suffix); andzencoding-mode-keymaprather than the typical/expectedzencoding-mode-mapbecause zencoding-mode.el is unusual in explicitly declaring its keymap and not using the standard name for it.Use C-hk to check what the key in question is bound to, and Emacs will tell you both the name of the keymap and the name of the library, which establishes both arguments.