Emacs 用一个键盘组合执行两个功能

Emacs 用一个键盘组合执行两个功能,emacs,elisp,Emacs,Elisp,我正试图让C-映射到移动行尾然后换行和缩进 在我的.emacs中,我一直在玩弄以下内容: (global-set-key (kbd "C-<return>") '(progn (move-end-of-line) (newline-and-indent))) (全局设置键(kbd“C-”)(progn(移动行尾)(换行和缩进))) 及 (defun c-ret() '(移动行尾换行和缩进)) (全局设置键(kbd“C-”)C-ret) 但两者都不起作用 指针?您正在引用命令 这

我正试图让
C-
映射到
移动行尾
然后
换行和缩进

在我的.emacs中,我一直在玩弄以下内容:

(global-set-key (kbd "C-<return>") '(progn (move-end-of-line) (newline-and-indent)))
(全局设置键(kbd“C-”)(progn(移动行尾)(换行和缩进)))

(defun c-ret()
'(移动行尾换行和缩进))
(全局设置键(kbd“C-”)C-ret)
但两者都不起作用


指针?

您正在引用命令

这意味着他们不会被处决。您还需要(交互式)向emacs表示它可以从键盘调用

然后,您需要将参数设置为正确的函数

此外,我认为你对退货的命名是错误的

你在这里的基本误解是知道eLisp是如何工作的。没关系,这是一种神秘的编程语言

“a.k.a QUOTE实际上是一个特定于Lisp的特殊指令。它说,“不要计算我后面的内容”,并返回未计算的参数

所以“(foobar)被分解为(QUOTE(foobar)),它返回(foobar)

试试这个:

(defun c-ret()
    (interactive)
    (move-end-of-line nil)
    (newline-and-indent))

(global-set-key (kbd "C-RET") 'c-ret)

您无需自己编写任何代码就可以做到这一点。有关将命令序列捕获为键盘宏、命名并保存在.emacs中的说明,请参阅。然后,您可以给新命令一个您选择的键绑定,例如使用
(全局设置键(kbd“C-C i”)'新命令名)

如果您想要一行解决方案,这也可以:

(global-set-key (kbd "C-<return>") (lambda () (interactive) (move-end-of-line nil) (newline-and-indent)))
(全局设置键(kbd“C-”)(lambda()(交互式)(移动行末nil)(换行和缩进)))
(global-set-key (kbd "C-<return>") (lambda () (interactive) (move-end-of-line nil) (newline-and-indent)))