为什么 tmux 无法通过 MobaXterm 识别 ctrl+shift+arrow?

为什么 tmux 无法通过 MobaXterm 识别 ctrl+shift+arrow?

我已经配置好tmux了,这样ctrl++shiftleft/right arrow可以按照窗口的数字排列向左/向右移动窗口。

IE:

# ~/.tmux.conf
...
bind-key -n C-S-Left swap-window -t -1
bind-key -n C-S-Right swap-window -t +1
...

ssh当我在运行 tmux 的 PC 上时,这个功能可以正常工作,但当我在 PC 上使用时,这个功能不起作用MobaXterm

我认为这是因为我在电脑前时它可以工作,所以这表明 MobaXterm 设置存在问题 -我可以设置一些东西,以便ctrl++在整个会话中以与通过直接连接的键盘相同的方式“识别”它们?shiftleft/right arrowMobaXtermssh

我已经尝试过接受的答案这个问题- 它不起作用。不过,那个问题并不完全相同:它是关于ctrl+ 的arrow,而不是ctrl+ shift+ arrow,因此可能需要对那个被接受的答案进行一些轻微的调整,但这行的语法对我来说很难懂 - 我看不出它需要如何修改才能支持ctrl+ shift+arrow而不是ctrl+ arrow(如果它是必需的)。

$ tmux -V
tmux 2.9a

答案1

如果您cat在 MobaXterm 中运行 tmux 外部,然后按 CS-Left,您会看到什么?这与按 C-Left 或按没有任何修饰键的 Left 时有什么不同?

如果这三个都是不同的,你可以配置它们。如果没有,你只能配置唯一的。

您可以在终端覆盖中更改它们,kRIT5 是 C-Right,kLFT5 是 C-Left,kUP5 是 C-Up,kDN5 是 C-Down。对于 CS-Right,请使用 kRIT6、kLFT6 等。数字如下:

       3       Alt
       4       Shift + Alt
       5       Control
       6       Shift + Control
       7       Alt + Control
       8       Shift + Alt + Control

S-Left 是普通的 kLFT(没有数字),S-Right(kRIT)也是一样,等等。

因此对于 CS-Left,您需要 kLFT6、kRIT6、kUP6、kDN6。

例如对于 CS-Left 您可能会看到(您不会看到这个,因为如果您看到了它就会起作用,但这只是一个例子):

^[[1;6D

正如我上面所说,确保这是唯一的,许多终端不支持所有修饰符。

^[是 Escape,因此它进入终端覆盖\E

terminal-overrides 是一组逗号分隔的条目。每个条目都是一个冒号分隔的功能列表。第一个是要匹配的模式TERM

您需要确保 MobaXterm 使用的不是TERM本地计算机,否则您最终也会覆盖本地终端。如果两者都使用xterm,请尝试制作 MobaXtermxterm-color或其他东西,或者xterm通过执行infocmp -x xterm >copy然后编辑副本以更改开头的名称(之前的第二行|)并使用再次安装来复制tic -x copy。显然,您需要配置 MobaXterm 以将其设置为不同TERM(或根据例如SSH_CONNECTION或其他内容在您的 shell 配置文件中执行此操作)。

然后您可以像这样在终端覆盖中添加它们:

set -as terminal-overrides ',myxterm:kLFT6=\E[1;6D:kRIT6=\E[1;6C'

确保在更改 .tmux.conf 后完全重新启动 tmux,或者在从正在运行的 tmux 更改终端覆盖后分离并重新连接。

相关内容