54

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

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

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

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

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

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

4

1 回答 1

50

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

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

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

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

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

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即从sf.net的tmux Git 存储库中的最新代码构建(在可克隆 URL 处git://git.code.sf.net/p/tmux/tmux-code)。

于 2013-03-18T06:59:16.790 回答