Tmux 无法区分插入和移位插入

Tmux 无法区分插入和移位插入

Insert当在 xterm 中时,给出^[[2~并且,

Shift+Insert给出^[[2;1~

在我启动 tmux 之前,这一切都很好。

请注意,$TERM变量保持不变,因此此问题不应与 terminfo 有关。

在 xterm 中时,Tmux 无法区分InsertShift+Insert并且两者都被读取为^[[2~。不仅是 xterm,在虚拟控制台中启动的 tmux 也表现出相同的行为。

我在 tmux conf 文件中尝试过使用和不使用set -g xterm-keys on,但没有成功。 FWIW 我正在 XTerm(296) 上运行 tmux 1.8,这些是我的覆盖.Xresources

XTerm*VT100.Translations: #override \
Shift<Key>Insert: string("\033[2;1~") \n\
<Key>Insert: string("\033[2~")

这真的很痛苦,因为我想在 vim 中映射Shift+Insert但不能在 tmux 中做到这一点。

有趣的是,当我在同一个 xterm 中运行 GNU screen 时,它很容易区分InsertShift+ Insert。我开始相信这是 tmux 中的一些邪恶之处,而不是我的设置。

有谁知道如何让 tmux 透明地获取密钥,就像 xterm 如何获取它一样,而不会在中间损坏它,或者我做错了什么?

答案1

的值TERM无关紧要。正如我在中指出的tmux 未正确传递 ctrl-shift-arrow 序列tmux有一个它知道的 xterm 风格的特殊键表。对于这种情况,表中xterm_keys_table有一个用于插入的条目:

    { KEYC_IC,      "\033[2;_~" },

这意味着它通常会将带有下划线的参数的任何变体转换"_"为相同的值:

\033[2;2~
\033[2;3~
\033[2;4~
\033[2;5~
\033[2;6~
\033[2;7~
\033[2;8~

更改此设置的方法是xterm-keys

xterm-keys [上|离开]
如果设置此选项,tmux将生成 xterm(1) 样式的功能键序列;这些包含一个数字来指示修饰符,例如转移,替代或者控制键。默认为离开

当你转动选项时,然后tmux将不改变地传递与该模式匹配的特殊键:

set-option -gw xterm-keys on

但是,您可能会注意到1tmux 的源代码中没有提到这一点。当tmux读取键时(在决定如何处理它们之前),它会保存修饰符。它1根本无法区分有修饰符和无修饰符。这是有道理的,因为xterm也无法区分两者。

无论如何,xterm 通常不会发送任何事物对于移位插入键。您可以强制它使用资源来执行此操作translations,但根据xterm 手册,移位插入会导致它插入选定的文本(即粘贴):

Shift <KeyPress> Insert:insert-selection(SELECT, CUT_BUFFER0) \n\

相关内容