在tmux中绑定Ctrl+Tab和Ctrl+Shift+Tab

Posted

技术标签:

【中文标题】在tmux中绑定Ctrl+Tab和Ctrl+Shift+Tab【英文标题】:Bind Ctrl+Tab and Ctrl+Shift+Tab in tmux 【发布时间】:2013-03-06 09:16:53 【问题描述】:

我正在尝试获取 ctrl+tabctrl+shift+ tab 绑定在 tmux 会话中工作(我也在使用 PuTTY)。

我已经经历了不得不重新编译 PuTTY 的痛苦,这样它才能正确发送 ctrlshift 。使用 ctrl+v 后,我可以看到 ^[[27;5;9~^[[27;6;9~ 正在为 ctrl+tabctrl+shift+tab。有什么办法可以让这些绑定到 tmux 中的下一个窗口和上一个窗口?

编辑: 经过一番研究,我想我可能必须配置 xterm 以包含这些键码。知道我会怎么做吗?

编辑2: 所以我发现我可以检索 infocmp 并重新编译它。我加了

kctab=\E[27;5;9~, kcstab=\E[27;6;9~,

到最后,除了现在它给了我一个错误。 "条目不以第一列中的终端名称开头"

【问题讨论】:

关于如何使用 Ctrl-Tab 支持重新编译 PuTTY 的说明。 scnr.net/blog/index.php/archives/61 【参考方案1】:

tmux 的最新“未发布”版本会在您让终端发送这些 xterm 样式的键序列后自动识别它们(无需更改您的 terminfo 条目)。下一个版本(1.8?)也应该有这个支持。使用适当的 tmux1 构建,您所要做的就是在 tmux 配置中绑定键:

bind-key C-Tab next-window
bind-key C-S-Tab previous-window

您仍然需要在这些键之前键入前缀键。

(注意:~/.tmux.conf 仅在服务器启动时处理。如果您对其进行更改,您将需要退出所有会话并重新启动服务器,或者使用(例如)tmux source ~/.tmux.conf 来让您现有的服务器重新处理文件。)

此外,如果您希望 tmux 将这些(和其他)xterm 样式的键序列传递给在 tmux 内运行的程序,那么您需要启用 @ 987654325@窗口选项。

set-option -gw xterm-keys on

(如果您愿意,可以使用-w 而不是-gw,在每个窗口的基础上执行此操作。)


如果您希望能够在不输入前缀的情况下使用这些键,那么您可以使用“无前缀”绑定:

bind-key -n C-Tab next-window
bind-key -n C-S-Tab previous-window

不过,这或多或少会将密钥“专用”给 tmux。在 tmux 中运行的任何程序都很难键入这些键(例如,您必须使用 tmux 命令send-keys C-Tab——正常情况下,xterm-keys 必须是能够发送这些 xterm 样式的键序列)。


您的 terminfo 条目编辑的问题可能是因为命名终端类型的行之后的每一行都需要以 Tab 开头。不以制表符开头的行是新终端条目的开始。从技术上讲,NL TAB 序列基本上是这种文件格式的续行;每个条目都是一个逻辑行。

另外,如果您要重新定义 terminfo 条目,请务必将 -xinfocmptic 一起使用,以保留用户定义的功能(其中一些相当标准)。


1 即从tmux Git repository at sf.net 中的最新代码构建(在可克隆的 URL git://git.code.sf.net/p/tmux/tmux-code)。

【讨论】:

tmux 不将 C-Tab 和 CS-Tab 识别为有效键(说它是未知键)。感谢您的提醒,我恢复了我的 terminfo 更改,因为老实说,我真的不知道我在做什么。 糟糕,C-Tab(和 C-S-Tab)在我的 tmux 版本中被识别,但该功能不是最新版本 (1.7) 的一部分。如果您构建尚未发布的代码的最新版本(即来自 git://git.code.sf.net/p/tmux/tmux-code),那么它将支持这些密钥。很抱歉造成混乱!我将更新答案文本以描述这种情况。 作为注释,您可以即时重新加载 tmux 配置。 :source-file ~/.tmux.conf 如果在 tmux 中,也可以绑定。 另一个关于快速重新加载的注意事项bind r source-file ~/.tmux.conf \; display "Reloaded!" 所以我用前缀 + Ctrl-r 重新加载设置 我在 WSL 终端上,使用 tmux 版本 2.8,但它不工作。 Ctrl-Tab 不执行任何操作。我将终端应用程序上的键选项配置为不使用 Ctrl-Tab/Shift-Tab 快捷键,但这也不起作用。当我执行prefix + C-Tab 时,tmux 在状态行显示:.5I,而prefix + C-S-Tab 显示:.6I。不确定这是否是什么线索。

以上是关于在tmux中绑定Ctrl+Tab和Ctrl+Shift+Tab的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WPF 中捕获 Ctrl + Tab 和 Ctrl + Shift + Tab?

用于 RibbonTab 的 WPF IsSelected 绑定在 ctrl+tab 上停止工作

pycharm 快捷键

Tmux 学习摘要1--使用默认配置进行基本操作

tmux开启鼠标

如何在 Konsole 中转发 `<Ctrl>-<Tab>`?