无法将Enter绑定到Emacs中的'换行符和缩进!!! 很烦人

Mar*_*osi 2 emacs

无法newline-and-indent在Emacs中绑定Enter !很烦人.

通过将'mode'更改为ruby并且仍然没有,我已经尝试了以下线程中的所有内容:

如何让Emacs自动缩进我的C代码?

我知道问题是RETURN关键,因为如果我绑定其他东西,工作正常.我试过[enter],(kbd "enter"),(read-kbd-macro "enter"),(kbd "RET")


后续行动1.

这就是我得到的 C-hkRET

RET运行命令newline,这是一个交互式编译的Lisp函数.

它与RET绑定.

(换行和可选的ARG)

插入换行符,如果换行,则移动到新行的左边距.如果use-hard-newlines' is non-nil, the newline is marked with the text-property很难'.使用ARG,插入许多换行符.呼叫auto-fill-function' if the current column number is greater than the value of填充列'和ARG是零.

我不知道该怎么做或如何弄清楚它是否是一个全局或局部绑定阻碍了它.试图重新映射C-j 也不起作用.

phi*_*ils 6

正如先前的评论所说,使用C-h k(describe-key)来查看当键没有按照你想要的那样被绑定时.该(kbd "foo")语法是正确的取foo描述键是指它作为.

您可能无法在相应的键盘映射中定义该键.

请注意,主要和次要模式键盘映射优先于全局键映射,因此如果覆盖全局绑定,则不一定会感到惊讶.

编辑:

我自己,我有一个钩子函数用于我使用的所有编程模式的常见行为,它包括你正在重新映射的那种.相关部分如下所示:

(defun my-coding-config ()
  (local-set-key (kbd "RET") (key-binding (kbd "M-j")))
  (local-set-key (kbd "<S-return>") 'newline)
  )

(mapc
 (lambda (language-mode-hook)
   (add-hook language-mode-hook 'my-coding-config))
 '(cperl-mode-hook
   css-mode-hook
   emacs-lisp-mode-hook
   ;; etc...
   ))
Run Code Online (Sandbox Code Playgroud)

请参阅Daimrod的答案,解释为什么我重新绑定RET到当前的绑定M-j- 虽然我使用comment-indent-new-line(或类似)而不是newline-and-indent(或类似),这在我的评论和非评论中做了我想要的.

在Emacs 24中,编程模式似乎来源于prog-mode,因此您可能(未经测试)将该列表减少到prog-mode-hook加上尚未执行此操作的第三方模式的任何异常.