linux - 在tmux中绑定(bind)Ctrl+Tab和Ctrl+Shift+Tab

标签 linux putty tmux xterm gentoo

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

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

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

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

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

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

最佳答案

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

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

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

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

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

set-option -gw xterm-keys on

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


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

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

不过,这或多或少会将 key “专用”给 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)。

关于linux - 在tmux中绑定(bind)Ctrl+Tab和Ctrl+Shift+Tab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15470001/

相关文章:

python - 如何检测 python 应用程序 (Linux) 中的用户不活动时间?

putty - PuTTY 命令行接受多个文件参数吗?

php - 无法从 PHP 向 TMUX session 发送命令

vim - Tmux 与 iTerm2 分割 Pane

scroll - tmux 中鼠标滚轮不滚动

linux - 调用bash脚本在if语句和变量赋值上生成错误

java - tomcat Webapp 之外的 Jar 文件未执行

linux - 现在Linux中默认模拟的视频终端是什么样的?

linux - UNIX 中的可选命令

ubuntu - 使用 SDL 时腻子中的 "Init kbd"