如何在 putty 上启用 GNU 屏幕的控制组合键?

如何在 putty 上启用 GNU 屏幕的控制组合键?

ssh我正在通过使用访问Linux盒子putty

当我不跑步时,组合键工作正常screen。但是,Ctrl 组合键在会话下不起作用screen。事实上,a Ctrl-any key与没有组合的相同键注册相同Ctrl

Ctrl我通过输入-V然后输入Ctrl-key组合来找出发送到我的终端的字符来知道这一点。

例如,Ctrl- (左箭头)给我^[[Dscreenscreen256-color term)。给了我同样的结果。

奇怪的是Alt——key组合效果很好。

特别是,我想让“forward-word”和“backward-word”键绑定在screen.

我尝试修改.inputrc以使用各种终端。因此,我的.inputrc看起来像这样:

$if term=xterm
    'xxx' : forward-word # xxx key gotten from Ctrl-V
    'xxx' : backward-word
$endif
$if term=screen-256color
...
...

TERM我还通过设置我的bash个人资料的 、设置TERM.screenrc设置键盘终端映射来尝试各种终端Putty。显而易见的linuxxterm,不起作用。然而,由于明显的原因,我并没有尝试所有设置的排列。

附加信息:

我纠正了,箭头键组合是唯一不起作用的组合。发行版是 RHEL 6。

.screenrc:

term xterm # tried other terms as well
shell -$SHELL # login shell to reload configs
caption string "%w"
hardstatus alwayslastline "%{b kw}%H %{r}%1` %{w}| %{g}%c %{w}| %{y}%d.%m.%Y %{w}| %{g}%l %{w}| %{-b kw}%u %-Lw%{= rW}%50> %n%f %t %{-}%+Lw%<"
vbell off
defscrollback 5000

Putty的默认键盘模式ESC [n~

摘自 putty 手册:“在默认模式下,标记为 ESC [n~,功能键生成 ESC [11~、ESC [12~ 等”等序列。这与 Digital 终端的一般行为相匹配。”

有趣的是,实际发送的内容Putty(按照第一个答案)https://superuser.com/questions/342848/cant-get-keyboard-to-work- Correctly-in-putty), 是

^[0D : left-arrow
^[[D : Ctrl-{left-arrow}

既然它们不同,我想putty这不是问题吗?

FWIW,我尝试更改 Putty 上的应用程序光标键模式设置,但无济于事。我也尝试使用tmux,却遇到了同样的问题。

答案1

在默认配置中,PuTTY 将光标键发送到普通的模式,例如,^[OA当屏幕将光标键设置为应用模式,例如^[[A.

这是通过屏幕发送转义序列来打开键盘(在 termcap ks、 terminfo中smkx)来完成的。这恰好会打开数字键盘和光标键的应用程序模式,因为两者都存在于该ks/smkx功能中。 screen 在初始化终端时使用此功能(如果存在)。 screen 还通过在 termcap 功能中发送字符串(CS如果已设置)来跟进,暗示原始设计是使用终端描述,其中只有键盘由 初始化ks/smkx

您会注意到这种差异,因为您的键绑定期望由光标键发送的字符串普通的模式。如果您修改了屏幕的终端描述以省略更改光标键的部分,则可以继续使用这些绑定。

例如,您可以这样做:

infocmp screen >foo
vi foo

并更改分配

smkx=\E[?1h\E=,

smkx=\E=,

然后

tic foo

编译修改后的描述。如果您以(非 root)用户身份执行此操作,tic 会将编译后的描述放入您的~/.terminfo目录中。这种方法有缺点,tput最好使用它来获取键绑定信息。但这很简单。

进一步阅读:

答案2

我发现这个另一个问题发布赏金后...

* Ctrl 和箭头键在 putty 中不起作用!我该怎么办?

putty 反转了 ctrl 上光标键模式的含义,这对于 tmux 来说有点难以正确检测。要正确使用 ctrl 键,请更改 terminfo 设置,以便 kUP5(Ctrl-Up 等)是调整后的版本,并禁用 smkx/rmkx,以便 tmux 不会更改模式。例如,在 .tmux.conf 中使用此行(假设您将 TERM 设置为 xterm):

设置 -g 终端覆盖“xterm*:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:smkx@:rmkx@”

请注意,这仅适用于 tmux 1.2 及更高版本。

https://stuff.mit.edu/afs/athena/project/bsd/src/tmux-1.3/FAQ

相关内容