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

我正在尝试获取 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)。

https://stackoverflow.com/questions/15470001/

相关文章:

linux - BASEDIR 环境变量未正确定义

ruby-on-rails - 如何在 Linux 上使用 Ruby 2.0 改进 unicorn

linux - 我需要 -D_REENTRANT 和 -pthreads 吗?

linux - 如何使用 sed 通过灵活的键和值更改我的配置文件?

mysql - 用于数据库备份的 Linux shell 脚本

linux - Bash:在文件中的特定位置插入一行

c - 绑定(bind)失败 : Address already in use

php - 如何在 Ubuntu 14.04 上更改 php-cli 版本?

linux - 如何判断文件是否在/bin/sh 中超过 30 分钟?

linux - 如何在 AWS 上的 Amazon Linux AMI 中自动启动 node.js