Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
421 views
in Technique[技术] by (71.8m points)

elisp - Unset key binding in emacs

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The general way to unbind a key (for any keymap) is to define a binding of nil:

(define-key KEYMAP KEY 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-key and local-set-key.

As to your specific example, you probably want something like this:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...