Bash 如何找出终端需要发送的转义序列?

Bash 如何找出终端需要发送的转义序列?,bash,ubuntu,terminal,tmux,byobu,Bash,Ubuntu,Terminal,Tmux,Byobu,我正在使用osX上的终端应用程序连接ubuntu(我想是12.04)。我的终端默认设置为xerm-256。在此模式下,按下F2时,终端发送\033OQ序列。但是,Shift-F2或Control-F2没有映射。也没有为左移、右移、控制左、控制右等设置序列。我需要这些键中的一些来操作各种程序中的功能。以拜武为例。Shift-F2和Control-F2用于垂直和水平分割屏幕。在tmux中,箭头键与shift和control一起用于调整窗格大小 我的问题是我不知道终端应该发送什么序列。我如何找出这些序

我正在使用osX上的终端应用程序连接ubuntu(我想是12.04)。我的终端默认设置为xerm-256。在此模式下,按下F2时,终端发送\033OQ序列。但是,Shift-F2或Control-F2没有映射。也没有为左移、右移、控制左、控制右等设置序列。我需要这些键中的一些来操作各种程序中的功能。以拜武为例。Shift-F2和Control-F2用于垂直和水平分割屏幕。在tmux中,箭头键与shift和control一起用于调整窗格大小

我的问题是我不知道终端应该发送什么序列。我如何找出这些序列应该是什么?我知道我可以按Control-v键,然后按一个键来获取接收到的代码,但这不是我需要的。我不需要查看发送的序列。我需要知道我需要发送什么序列

例如,我的左箭头发送^[OD。我的控件左键发送^[[5D]。但是我的上下键没有区别。我的下键发送^[OB和控件下键也发送^[OB。我的上键存在同样的问题。有无移位都是一样的

是否有一个包含所有键和代码的列表,特别是带有诸如shift、control、alt/option等修改器的列表

我怎样才能知道预期的序列是什么,以便发送所需的内容?

XTerm 由于您正在宣传您正在使用xterm(通过您的术语值),您很可能希望安排发送xterm为这些密钥发送的序列。xterm的文档在本节底部描述了这些特定的修改密钥序列:

…xterm识别函数键修饰符,这些修饰符是附加在控制序列的最终字符之前的参数

2档
3 Alt
4 Shift+Alt
5控制
6控制+换档
⋮
例子 F5发送
^[[15~
,因此Shift-F5应发送
^[[15;2~
(即在最后一个字符之前添加
;2

箭头键和前四个功能键有点不同。它们通常使用基于SS3的序列(从
^[O
开始);需要将它们更改为基于CSI的等价物(从
^[
开始)由于SS3序列不能有参数。此外,键的正常序列通常没有数字参数,因此还添加了占位符(?)
1
参数:

Up发送
^[[A
^[OA
,因此Shift+Up应发送
^[[1;2A
(即切换到CSI,并在最后一个字符之前添加
1;2

F1发送
^[OP
,因此Shift+F1应发送
^[[1;2P
(即切换到CSI,在最后一个字符之前添加
1;2

您可能还想查看各种终端模拟器的源代码,看看它们做了什么

配置 由于您的终端仿真器尚未发送您想要支持的所有序列,因此您必须对其进行配置。OS X随附的内置终端仿真器terminal具有一些预配置的密钥,但您可能需要自己添加其中的大部分。您可以通过调用终端来访问密钥列表首选项…菜单项,选择顶级设置选项卡,选择适当的配置文件,并切换到其键盘选项卡。从中可以添加和删除键定义。例如,您可以使用
shift
将字符串发送到shell:F2
de>(原文如此)并在字符串文本框中键入ESC,后跟
[1;2Q
(ESC将显示为
\033
,这没问题)

注意:更改Option Right和Option Left的定义可能会影响某些程序(例如Shell和Emacs)的运行方式使用这些按键。默认配置发送ESC-f和ESC-b,这是Emacs风格的按键,用于许多程序默认会理解的后退字和前进字。在我看来,这种配置似乎是后退的;shell(和其他程序)应该配置为识别正确修改的箭头键序列

您可能还想尝试另一个终端仿真器。它内置了对大多数修改键的支持(可能不是Control+Fn变体),因此手动配置的数量会更少


另外,请注意,OS X为某些控制Fx组合定义了一些系统范围的快捷键(请参见系统首选项、键盘、键盘快捷键、键盘和文本输入)。您必须禁用其中一些快捷键,以确保终端或iTerm有机会“查看”您所需的组合键。

Wow!这正是我所需要的。我看过xterm文档,但在您解释之前,它对我来说毫无意义。