无法在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 也没有用。
答案 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
。