Tmux中Ctrl+方向键与Ctrl+Shift+方向键发送错误键码问题求助
Tmux中Ctrl+方向键与Ctrl+Shift+方向键发送错误键码问题求助
问题描述
大家好,今天我升级到MacOS 13.5后,立刻遇到了一个头疼的问题:在tmux里(不管是用iTerm2还是系统自带终端运行),按下Ctrl+方向键或者Ctrl+Shift+方向键时,发送的键码完全不对。
举个上箭头的例子:
- 正常情况下的正确键码应该是:
Ctrl+上箭头:\e[1;5ACtrl+Shift+上箭头:\e[1;6A
- 但tmux实际接收到的却是:
Ctrl+上箭头:\e[1;6ACtrl+Shift+上箭头:\e[1;7A
我已经做过验证:先禁用了tmux里所有用到这些快捷键的绑定,然后在运行cat的状态下输入这些按键组合,确认键码确实是错误的。
现在的情况就是,Ctrl+方向键的行为和Ctrl+Shift+方向键完全一致,而Ctrl+Shift+方向键因为发送了未被识别的键码,完全起不了作用。不过在tmux之外(直接在iTerm2里操作),这些按键的键码都是正常的,说明问题确实只出在tmux上。
临时的不完美解决方法
我暂时用了个有点 hack 的 workaround:修改iTerm2配置文件里的按键映射,把:
Ctrl+上箭头映射为\e[1;4ACtrl+Shift+上箭头映射为\e[1;5A
其他方向键也做了同样的修改
这样强制让tmux收到正确的键码,看起来像是键码整体偏移了一位。但这个方法有个明显的缺点:在tmux之外,Ctrl+方向键就失效了,因为\e[1;4A不是常规被识别的键码。
软件版本信息
除了今天升级的MacOS,我的其他软件已经好几个月没更新了:
- tmux 2.7
- iTerm2 3.4.20(今天为了调试特意升级的,但旧版本也能复现问题)
- iTerm2和tmux里都使用
xterm-256color作为终端类型 - 我试过执行
set-window-option -g xterm-keys on,但完全没起到作用
备注:内容来源于stack exchange,提问作者JDN
相关产品推荐
相关产品推荐

