Insert当在 xterm 中时,给出^[[2~
并且,
Shift+Insert给出^[[2;1~
在我启动 tmux 之前,这一切都很好。
请注意,$TERM
变量保持不变,因此此问题不应与 terminfo 有关。
在 xterm 中时,Tmux 无法区分Insert和Shift+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 时,它很容易区分Insert和Shift+ 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
但是,您可能会注意到1
tmux 的源代码中没有提到这一点。当tmux
读取键时(在决定如何处理它们之前),它会保存修饰符。它1
根本无法区分有修饰符和无修饰符。这是有道理的,因为xterm
也无法区分两者。
无论如何,xterm 通常不会发送任何事物对于移位插入键。您可以强制它使用资源来执行此操作translations
,但根据xterm 手册,移位插入会导致它插入选定的文本(即粘贴):
Shift <KeyPress> Insert:insert-selection(SELECT, CUT_BUFFER0) \n\