问题
我今天升级到了 MacOS 13.5,立即注意到了这个问题。当我在 tmux(在 iterm2 中运行)中执行ctrl + arrow-key
或ctrl + shift + arrow-key
发送错误的键码时。
例如,对于向上箭头,正确的代码是:
ctrl + up-arrow: \e[1;5A
ctrl + shift + up-arrow: \e[1;6A
但它发送的是:
ctrl + up-arrow: \e[1;6A
ctrl + shift + up-arrow: \e[1;7A
我通过禁用所有使用快捷方式并在运行时输入键序列的 tmux 键绑定来验证了这一点cat
。
因此ctrl + arrow-key
其行为就像ctrl + shift + arrow-key
,并且ctrl + shift + arrow-key
什么也不做(发送未处理的键码)。
在 tmux 之外(在 iterm2 中),发送的键码正确,因此问题只限于 tmux。如果我使用内置 MacOS 终端而不是 iterm2 运行 tmux,也会出现此问题。
不完美的修复
我的解决方法是将我的 iterm2 配置文件键映射修改为:
ctrl + up-arrow: \e[1;4A
ctrl + shift + up-arrow: \e[1;5A
...same for other arrow-keys
这迫使 tmux 发送正确的键码,因此看起来键码只是出于某种原因偏移了一个。此修复的缺点是它ctrl + arrow-key
在 tmux 之外中断,因为\e[1;4A
这不是通常接受的键码。
软件版本
除了 MacOS 升级之外,我的其余软件堆栈已经好几个月没有升级了。
xterm-256color
我在 iterm2 和 tmux 中都使用了。我试过了set-window-option -g xterm-keys on
,但没有用。
tmux 2.7
iterm2 3.4.20(今天作为调试的一部分进行了升级,但在旧版本上也出现了重现)