如何在Emacs中设置CMD键绑定?

15

我在Mac OS X终端中使用通过homebrew安装的Emacs。

我的CTRL键是C键,ALT键是Meta键。

我要如何为CMD键组合定义按键绑定?

比如,我想把CMD-(右箭头)设置为到行末。


编辑:

我已经尝试了@nickcarlo下面的建议。

(setq mac-command-modifier 'super)
(global-set-key (kbd "s-<right>") 'move-end-of-line)

我认为CMD键没有被正确地设置为超级键,因为当我输入C-xM-x或其他内容时,我没有在小缓冲区中看到s-foo。我注意到,在我打开两个终端窗口时,按下CMD-right会在这两个终端窗口之间切换,所以我想这可能会阻止任何自定义设置。但是,我尝试过:

(global-set-key (kbd "s-9") 'move-end-of-line) 

..而且CMD-9仍然没有任何反应,除了发出蜂鸣声告诉我按错了键。

设置非CMD键盘组合键似乎工作正常,比如:

(global-set-key (kbd "C-w") 'move-end-of-line)

5
据我所知,只要在终端中运行Emacs,你就无法这样做。Mac的cmd修改键不能通过(甚至可能无法编码为标准终端协议/字符集)。如果你想让这个功能正常工作,你应该考虑将Emacs.app作为一个应用程序运行。 - user725091
3个回答

17

您可以使用类似以下的方式设置:

(global-set-key (kbd "s-<right>") 'move-end-of-line)

"s" 代表你的命令键。

附注:我现在不在我的 Mac 上,所以我不确定你需要写什么来将其设置为特定的键,以将其移动到行末,但是在 Emacs 中,命令由 s 表示。

编辑 我刚在我的 Mac 上测试了这个。这是你要编写的精确代码(如果你想全局设置),将你的命令键 + 右箭头键绑定到将光标移动到行末。

如果上述方法不起作用,您也可以尝试

(global-set-key (kbd "\s <right>") 'move-end-of-line)
上面的快捷键等同于CMD+右箭头键,而这个快捷键是先按下CMD键再释放CMD键再按右箭头键。在我的系统上,两种方式都适用于OS X。
另外,请查看以下帖子以将您的CMD键设置为超级键,以防您的Emacs没有将其注册为超级键: http://ergoemacs.org/emacs/emacs_hyper_super_keys.html 具体来说,您可以使用以下代码将CMD键设置为超级键:
(setq mac-command-modifier 'super)

无法让它工作。我应该说我正在使用Emacs Live-https://github.com/overtone/emacs-live..然而,我尝试了一个普通的vanilla emacs,仍然没有结果。这段代码-https://github.com/lest/emacs-config/blob/master/rc-hotkeys.el-似乎表明格式应该是<s-left>,但仍然不起作用。就好像绑定根本没有注册一样。 - cannyboy
@cannyboy 我从macports获取了Emacs的副本(port install emacs-app),也许这就是为什么我可以用上面的代码使其工作的原因。我从未使用过Emacs Live,所以我不确定它与我拥有的那个有何区别。 - Nico
@cannyboy 一旦你写了这行代码或者类似的其他行,移动到行末并执行 C-x C-e,看看它是否在迷你缓冲区下方显示功能名称。你也可以通过执行 C-h b 来检查你的按键绑定,看看它是否在列表中。 - Nico
1
我在我的问题中添加了内容。像Jon O提到的那样,我猜在终端中不可能实现。 - cannyboy
@cannyboy 我明白了。很抱歉,我以为你在开发Emacs应用程序。 - Nico

7
在Aquamacs中,对我有用的方法如下所示。
(global-set-key (kbd "A-r") 'my-command)

2
非常感谢。这正是我在寻找适用于我的Aquamacs的东西 :) - shivams

1
Step 1: c-x c-f .emacs // 打开 .emacs 文件
Step 2: 在 .emacs 文件末尾添加以下行
    ;; changing the command to control
    (setq mac-command-modifier 'control)

步骤三:保存 .emacs 文件

步骤四:M-x eval-buffer //M-x = Alt-x // 这将评估 .emacs 缓冲区并重新加载 Emacs

步骤五:尝试使用 CMD-e 跳转到行末。// 现在 CMD 的功能类似于 control

步骤六:如果仍然无法使用 CMD-e,请重新启动 Emacs。

享受使用 Emacs!


1
这样做会将他的命令键设置为控制键吗?我认为这不是他想要做的。 - Nico
1
我感觉使用cmd更舒适,因为它可以节省很多时间并减轻小指疼痛。 - USK
2
我理解这一点,似乎这是 OS X Emacs 社区的通行做法(尽管我没有遵循,因为我将 CMD 键绑定到其他操作)。我只是在说我不认为发布者打算将他的 Meta 操作更改为 CMD 键。 - Nico
1
他提出的问题是:“我想将CMD-(右箭头)设为移到行尾。” 在我的帖子中,我建议使用CMD作为CNT是最佳实践之一。如果他不想更改他的CMD键绑定,则可以使用您的解决方案。 - USK
1
他还说:“我的CTRL键是我的C键,ALT键是Meta。我该如何定义CMD键组合的键绑定?”这并不意味着他想要“如何将我的Control键更改为CMD”。如果您的答案能帮助他,我会很高兴。我并不是说您要删除您的答案或其他什么。我是说,如果您知道绑定CMD键的解决方案,这在OS X上被Emacs视为超级键,那不仅会帮助他,而且也会帮助我们所有人。但正如您所说,他可以接受任何一个答案。无论如何,在这里祝您好运。 - Nico

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接