如何区分Cm和RETURN?


14

在javascript模式下尝试使用时C-c C-m i,出现错误消息“ C-c RET未定义?”。

是什么让Emacs相信我在紧迫RET

我如何才能正确地进行此绑定操作?


2
德鲁

1
相同的问题,不同的切入点,对于来自不同搜索的人来说,最好同时回答两个问题。
Jordon Biondo


Answers:


19

Emacs“认为” C-mRET因为“ Control M”是ASCII控制字符“ carriage return”。即使这个原因是“历史性的”,Emacs也可以在终端中运行,因此它需要支持终端现在仍然可以工作的方式。

尝试打开终端窗口,键入“ ls”,然后按C-m。您将看到它被解释为“返回”,即使您不在 Emacs中也是如此。

有关控制字符的详细信息,请参见Wikipedia上的控制字符。

为了区分C-mRET一个GUI的Emacs,一个可以改变C-i,以C-m@nispio的回答

(define-key input-decode-map [?\C-m] [C-m])

;; now we can do this:

(defun my-command ()
  (interactive)
  (message "C-m is not the same as RET any more!"))

(global-set-key (kbd "<C-m>") #'my-command)

也可以看看


2
太好了,谢谢。现在,我可以将C-m多个光标用作前缀映射。
约翰·威格利
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.