Tmux 吃掉控制选项卡序列

Tmux 吃掉控制选项卡序列

^[[27;5;9~我在 vim 中分配了ctrl-tab (即)来切换选项卡。它直接在 下工作xterm,但是当我也运行时,tmux这个序列只能偶尔工作。我想这是因为tmux捕获并且不转发该序列。

这是一个错误还是我使用错误?我的配置:

unbind C-b
set-option -g prefix C-a
bind-key a send-prefix

bind-key C-a last-window

set -g base-index 1
set -s escape-time 0

set -g status-bg red
set -g status-right '#(date)'
setw -g window-status-current-attr underscore

setw -g mode-mouse off
setw -g mode-keys vi
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection
bind y run-shell -b "tmux save-buffer - | xclip -i -selection clipboard"

# Experimental below
set -g terminal-overrides 'xterm:colors=256'

答案1

它只会在 tmux 中“偶尔”工作,因为 tmux 尝试将其输入与终端描述中定义的键相匹配:

  • 它读取字节序列,并且
  • 检查它是否与“外部”终端描述中的键匹配,并且
  • 如果是这样,商店键,以及
  • 稍后将“内部”终端描述的等效字节序列发送到内部运行的程序tmux

如果 vim 发送控制序列来切换 xterm 的资源, 则转义序列^[[27;5;9~将由 xterm 发送。modifyOtherKeystmux。阻止:它永远不会到达 xterm (用测试程序验证发送控制序列)。

如果您“偶尔”看到此工作,则可能是由于某些计时问题导致速度减慢,使 tmux 无法注意到转义序列。

答案2

我有一台机器tmux始终不会传递Ctrl+TabCtrl+ Shift+ Tab,即使我有另一台使用相同tmux版本和配置的机器,这种情况也不会发生。

我还没有弄清楚为什么,但对我有用的解决方案是配置tmux为显式地将这些序列传递给其中运行的任何内容:

# Pass on Ctrl+Tab and Ctrl+Shift+Tab
bind-key -n C-Tab send-keys Escape [27\;5\;9~
bind-key -n C-S-Tab send-keys Escape [27\;6\;9~

相关内容