^[[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 发送。modifyOtherKeys
tmux
。阻止:它永远不会到达 xterm (用测试程序验证发送控制序列)。
如果您“偶尔”看到此工作,则可能是由于某些计时问题导致速度减慢,使 tmux 无法注意到转义序列。
答案2
我有一台机器tmux
始终不会传递Ctrl+Tab和Ctrl+ 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~