我的 Emacs 设置中有几行:
;; swap defaults
(define-key prog-mode-map (kbd "RET") 'newline-and-indent)
(define-key prog-mode-map (kbd "C-j") 'newline)
这在我尝试的其他几种编程模式中按预期工作。但是在 Emacs Lisp 模式下,RET仍然绑定到newline
并且C-j仍然绑定到newline-and-indent
. 即使将键绑定代码移至 Emacs 初始化的最开始,我仍然观察到这种令人困惑的行为。如果我为 Emacs Lisp 的模式创建单独的键绑定语句,我没有任何问题。
;; swap defaults for most programming modes
(define-key prog-mode-map (kbd "RET") 'newline-and-indent)
(define-key prog-mode-map (kbd "C-j") 'newline)
;; swap defaults in Emacs Lisp mode too
(define-key emacs-lisp-mode-map (kbd "RET") 'newline-and-indent)
(define-key emacs-lisp-mode-map (kbd "C-j") 'newline)
为什么是这样?如果重要的话,我在 OS X 10.8.3 上使用 Emacs 24.3。
PS 我最近了解到electric-indent-mode
,它可能完成与这些键绑定非常相似的事情。然而,谜团仍然存在。