Mac Sierra下iTerm2中Emacs无法输入C-<、C->的解决求助
解决Mac终端下Emacs无法捕获C-< / C->快捷键的问题
我之前在Mac的iTerm2和Terminal.app里用Emacs时,也碰到过类似的组合键被拦截的问题,给你几个一步步的解决方法:
1. 先排查系统级快捷键冲突
Mac系统或者第三方工具很容易先把这类组合键截走,先确认这一点:
- 打开「系统设置」(Ventura及以后)或者「系统偏好设置」(旧版本),进入「键盘」>「快捷键」
- 逐个检查左侧的分类(比如「输入法」「窗口管理」「应用快捷键」等),看看有没有用了
Control + <或Control + >的快捷键 - 如果找到冲突项,要么修改该快捷键,要么直接禁用它,尤其是Alfred、Rectangle、Hammerspoon这类工具的全局快捷键要重点查
2. 配置iTerm2传递组合键给Emacs
如果系统层面没问题,那就是iTerm2默认没把这些组合键传给Emacs,需要手动映射:
- 打开iTerm2的偏好设置(快捷键
Cmd + ,),切换到「Profiles」标签页,选择你正在用的profile,然后点「Keys」 - 点击右下角的
+号添加新的映射:- 「Keyboard Shortcut」:按一下
Control + <,让iTerm2捕获这个按键 - 「Action」:选择「Send Escape Sequence」
- 在「Esc+」输入框中填写
<(也就是让iTerm2把Control + <转成Escape + <,Emacs能识别这个序列为C-<)
- 「Keyboard Shortcut」:按一下
- 对
Control + >做同样的操作,映射为「Send Escape Sequence」,输入>
3. 终端下的Emacs键映射补全
如果上面的设置后Emacs还是没反应,那可以直接在Emacs配置里把收到的转义序列绑定到C-<对应的功能:
在你的init.el或者.emacs里添加这段代码:
;; 针对终端环境,把Escape+<映射为C-<,Escape+>映射为C-> (when (not window-system) (define-key input-decode-map "\e<" [C-<]) (define-key input-decode-map "\e>" [C->]) ; 绑定multiple-cursors的标记功能 (global-set-key (kbd "C-<") 'mc/mark-previous-like-this) (global-set-key (kbd "C->") 'mc/mark-next-like-this) )
4. Terminal.app的适配(如果你用原生终端)
和iTerm2类似,Terminal.app也需要配置:
- 打开Terminal的偏好设置(
Cmd + ,),进入「键盘」标签页 - 点击「+」添加新条目:
- 「按键」:按
Control + < - 「动作」:选择「发送转义序列」
- 「转义序列」填写
\<(也就是Escape加<)
- 「按键」:按
- 同样给
Control + >做相同配置,转义序列填\>
这样设置后,你再用emacs -q测试,用C-h k按C-<,应该就能看到Emacs识别到这个组合键了,之后再配置multiple-cursors的绑定就没问题啦。
内容的提问来源于stack exchange,提问作者Jiacai Liu
相关产品推荐
相关产品推荐

