我可以在 tmux 键绑定中使用 Shift-Space 吗?

我可以在 tmux 键绑定中使用 Shift-Space 吗?

我一直在使用 (前缀)o来缩放当前 tmux 窗格,并Space缩放相邻窗格:

bind o      resize-pane -Z
bind Space  if-shell -F '#{window_zoomed_flag}' 'last-pane' 'select-pane -t :.+; resize-pane -Z'

我想将它们更改为使用SpaceandShift-Space代替。

bind Space    resize-pane -Z
bind S-Space  if-shell -F '#{window_zoomed_flag}' 'last-pane' 'select-pane -t :.+; resize-pane -Z'

我重新启动了 tmux 服务器并运行了tmux list-keys.列出了新的绑定,第一个绑定按预期工作,但我在传递S-Space到 tmux 进行第二个绑定时遇到问题。

使用 iTerm(我在 OSX 上)及其默认设置,⇧ShiftSpace会忽略⇧Shift修饰符,因此当我输入 时<prefix> S-Space,tmux 仅接收<prefix> Space.

实际上,我将 iTerm 配置为发送转义序列^[[32;2u,这样⇧ShiftSpace我就可以将它用于 Vim 键映射。启用此设置后,在命令行中输入<prefix> S-Spacetmux 插入内容。32;2u

我尝试使用cat -v内部 tmux 进行调试:

^[[32;2u    # S-Space
32;2u       # <prefix> S-Space

是否有 tmux 会识别为的不同转义序列S-Space,或者其他方式使其工作?

我读了一些有关 tmuxterminal-overrides设置的内容,但这听起来好像它仅适用于控制序列。C-a如果相关的话,我将其用作前缀键。

答案1

短:无

long:除非您更改了键盘映射,否则shift+space将仅发送space.

除了一些其他特殊键 ( Enter) 之外,您可能希望shift修改键盘发送的字符。这不是总是案子。你所熟悉的大多数都是基于xterm,例如,使用shiftcontrolalt(或meta)生成不同的转义序列。

tmux“知道”这些xterm键(并且具有可以设置为允许其使用这些键的模式)。否则(如果未设置),如果该键与已知特殊键(功能键、光标键和编辑键,例如和)xterm-keys之一的终端描述匹配,则接受该键(并将其映射到或任何“内部“使用终端描述)。HomeEndtmuxscreen

如果密钥不属于这些类别之一,则tmux忽略它(丢弃它)。

所以...如果你想使用shiftspace,你将必须让它发送tmux期望的转义序列之一,并根据相应的预定义功能进行绑定。

进一步阅读:

相关内容