You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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-<)
  • 对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:55:48