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

时间:2012-01-30 03:06:25

标签: emacs

无法在Emacs中将Enter绑定到newline-and-indent!非常烦人。

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

How do I make Emacs auto-indent my C code?

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


后续行动1.

这是我从 C-h k RET

获得的
  

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 也没有用。

2 个答案:

答案 0 :(得分:6)

正如先前的评论所说,使用 C -h k (describe-key)来查看当键没有按照你想要的那样被绑定时。对于(kbd "foo") describe-key引用它,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...
   ))

请参阅Daimrod的答案,解释为什么我将 RET 重新绑定到 Mj 的当前绑定 - 尽管我正在使用comment-indent-new-line (或类似的)而不是newline-and-indent(或类似的),它在评论和非评论中做我想要的。

在Emacs 24中,编程模式似乎来自prog-mode,因此你可以可能(未测试)将该列表减少到prog-mode-hook加上第三个例外 - 派对模式还没有这样做。

答案 1 :(得分:2)

如前所述,使用 C-h k C-j 因为 C-j 是执行newline-and-indent的标准键。

如果您打开一个新文件,请激活ruby-mode并尝试上一个 命令你会明白为什么它不起作用。因为ruby-mode没有 有newline-and-indent而是 reindent-then-newline-and-indent。是的,这是愚蠢的,但你可以问 给维护者改变它,或接受它。

但是我建议你使用 C-j 来做,因为 ruby-mode不是唯一可以这样做的模式,例如paredit-mode 使用paredit-newline