在OSX操作系统中,使用Terminal.app运行Emacs编辑器时,希望将“Command”键映射为“Meta”键。

10

我正在使用OSX Lion操作系统

我在Terminal.app中运行emacs

我想要将command键映射为M-x(总的来说,就是将command键映射为M)

我已经尝试过以下解决方法,但它们都不是我想要的:

我想要的是,只在Terminal.app(或只在emacs中)中将command键绑定为meta。 我该如何实现这一点?


1
如果你在Terminal.app中将Cmd映射为Meta,那么你将无法使用Cmd-C、Cmd-V和其他快捷键来复制粘贴文本。我认为关闭选项卡的Cmd-W也会被禁用。 - Erik Kaplun
5个回答

10

fwiw - iterm2需要额外注意一下,以便cmd键映射到meta,并与其他应用程序配合良好。 (cmd-tab行为、cmd-space(quicksilver)等) 这是我的设置,该设置倾向于左手使用cmd-tab 等操作。

在iterm2内部

  • (首选项>>键盘选项卡) 需要将左cmd重新映射为左option
  • 全局快捷键,将以下设置为“不重新映射修饰符”
    • cmd-space(使quicksilver正常工作)
    • ctl-cmd-space(使我的Omnifocus绑定工作)
    • cmd- ‘`’ - 循环窗口
    • cmd->(右箭头)使标签循环正确工作
  • (首选项>>配置文件选项卡>>键盘子选项卡) 我将左option键映射到escape上。这提供了大多数期望meta的shell应用程序所期望的行为。

这样使用右cmd进行某些本地iterm任务,但在具有不同按键绑定的应用程序之间切换时,进行通常的左手操作,缩小了重新训练肌肉记忆的范围。


2
这对我没用,但我认为只是因为答案已经过时了。以下是我的解决方法:在“键”选项卡中,将“左命令”设置为“左选项”(如果您使用“右命令”,也将“右命令”设置为“右选项”);然后在“配置文件”选项卡下的“键”选项卡中,选择“左选项键作为”和“右选项键作为”的“+Esc”选项(我猜这些选项可能是专门为emacs用户添加的)。但是,您将失去使用选项键输入特殊字符的能力(但在iTerm2中,其他应用程序包括Cocoa emacs仍将正常工作)。 - hoff2
1
同时,以上内容需要与我的emacs配置文件中的以下内容配合使用: (setq mac-option-modifier 'none) (setq mac-command-modifier 'meta) (setq ns-function-modifier 'hyper) - hoff2

4

FWIW: 我发现了另一种更适合我的方法来完成这个任务(这是在iTerm2中)。

我希望在终端中,emacs的行为与窗口中相同。我将emacs设置为使用以下代码片段中的命令键作为元键:

;;osx keys
(setq mac-option-key-is-meta nil)
(setq mac-command-key-is-meta t)
(setq mac-command-modifier 'meta)
(setq mac-option-modifier 'alt)

为了让我的命令键在iTerm2中像元键一样工作,我打开“偏好设置”->“配置文件”->“键盘”,然后添加新的按键映射。唯一的问题是你需要为每个按键单独进行设置,但你可以用类似这样的方式:

keyboard shortcut: <type command-p>
action: send escape sequence
Esc+: p

因此,我对我最常用的 meta+ 键进行了设置。如果有另一组像 option/alt 那样的单选按钮就好了,你只需说“command键的作用类似于Esc+”。


4
首先,在终端的偏好设置中,选择“设置”选项卡,在“键盘”子选项卡中,有一个复选框“使用选项作为元键”。虽然不完全符合您的要求,但它是内置的。
我想Cocoa键绑定系统可能会有所帮助,但根据我的搜索结果,它故意不允许重新映射命令。此页面提供了关于Cocoa键绑定和文本默认值的自定义信息。

3
我使用 cmd-key-happy (https://github.com/aim-stuff/cmd-key-happy) 工具,可以为特定的应用程序交换 altcommmand 键。
因此,在 Terminal.app 中,您可以像预期的那样使用所有元修饰键,而 Mac 特定的命令(复制、粘贴、关闭、新建)则使用 alt 键。

我也使用了一段时间,并且对它感到满意:). 直到最近,当我的公司启用终端的安全键盘输入时。我不认为我有办法禁用它。至少,点击菜单选项似乎没有改变任何东西。否则,我真的很喜欢这个解决方案。 - allyourcode

-2

你为什么一定要坚持使用Terminal.app呢?只需安装iterm2,然后继续生活。


我喜欢这种解决复杂问题的方法。 - user1311390
2
这并没有回答如何使用Terminal.app的问题。可以作为评论。 - David J.
从某种意义上说,它确实回答了这个问题,对于我们这些不知道(或者已经忘记)有一个替代品(iterm)可以允许所要求的功能的人来说。我试图多次点赞,但没有成功。 - davernator

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