Tmux 发送“ctrl + arrowkey”和“ctrl + shift + arrowkey”的错误键码

Tmux 发送“ctrl + arrowkey”和“ctrl + shift + arrowkey”的错误键码

问题

我今天升级到了 MacOS 13.5,立即注意到了这个问题。当我在 tmux(在 iterm2 中运行)中执行ctrl + arrow-keyctrl + 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(今天作为调试的一部分进行了升级,但在旧版本上也出现了重现)

相关内容