我正在尝试获取 ctrl+tab 和 ctrl+shift+tab 绑定以在 tmux 会话内部工作(我也在使用 PuTTY)。
我已经经历了必须重新编译 PuTTY 的痛苦,这样它才能正确发送 ctrl 和 shift 。使用 ctrl+v 后,我可以看到
^[[27;5;9~
和 ^[[27;6;9~
分别被发送给 ctrl+tab 和 ctrl+shift+tab 。有什么方法可以将它们绑定到 tmux 内的下一个窗口和上一个窗口?
编辑: 经过一些研究,我想我可能必须配置 xterm 以包含这些键码。知道我该怎么做吗?
编辑2: 所以我发现我可以检索 infocmp 并重新编译它。我添加了
kctab=\E[27;5;9~, kcstab=\E[27;6;9~,
到最后,除了现在它给了我一个错误。 “条目不以第一列中的终端名称开头”
最近“未发布”版本的 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 内运行的程序,那么您需要启用
xterm-keys
窗口选项。
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 条目,请务必将
-x
与 infocmp 和 tic 一起使用,以保留用户定义的功能(其中一些是相当标准的)。
1 即根据 sf.net 的 tmux Git 存储库中的最新代码构建(位于可克隆 URL
git://git.code.sf.net/p/tmux/tmux-code
)。
如果您的按键绑定在 Windows 终端/WSL 上不起作用,即:
bind -r C-Tab next-window
bind -r C-S-Tab previous-window
您需要转到终端键绑定设置并使用修饰符添加选项卡的映射。对于 Windows 终端,它将是
Setting
->Open JSON file
-> 转到 "actions"
-> 并添加以下内容:
{
"command":
{
"action": "sendInput",
"input": "\u001b[27;5;9~"
},
"keys": "ctrl+tab"
},
{
"command":
{
"action": "sendInput",
"input": "\u001b[27;6;9~"
},
"keys": "ctrl+shift+tab"
},
您可以使用应用程序
showkey -a
检查 Linux 中按键绑定的 Unicode 映射。不过,它对于选项卡来说效果不太好,因此对于选项卡的其他修饰符,请检查代码如何更改,例如带有修饰符的 PageUp
。