我通过 putty 访问 Linux 服务器 shell,但我使用的许多键都无法转换,
上、下、左、右都被视为 ^[[A、^[[B、^[[D 和 ^[[C;
但 C-up、C-down、C-left 和 C-right 也是如此。
而回车键被视为 Cj(向下移动到下一行),
退格键被视为 Ch,即向后删除。
我怎样才能阻止这些键被转换成其他键(这样我就可以例如配置 Ch 和 backspace 来执行两个不同的功能)以及是什么在进行这种转换(Putty、内核、shell)?
答案1
尝试改为$TERM
“xterm”。
尝试将 PuTTY 的键盘设置设置为“rxvt”、“Esc[n~”和“Control-?”。
您使用的是什么 shell?如果是 Bash,那么您可能需要进行一些设置~/.inputrc
。
按键解释受以下因素影响:
- PuTTY-或其他终端仿真器
- 运行终端仿真器的操作系统
/etc/X11/xorg.conf
- 如果您使用 X-Window 系统。- Bash/Readline 通过
/etc/inputrc
和~/.inputrc
- 或其他 shell 中的类似功能 - terminfo 或者在某些情况下 termcap
- 变量
$TERM
- 我可能忘记了什么
答案2
好的,这是我想到的解决方案 - 我放弃了 PuttyCyg 并开始使用 MinTTY。它似乎将我的更多实际密钥传递给了服务器。:>
详细说明 -
看到之后这篇博文 我觉得 Putty(Cyg) 可能需要进行修补才能完成我想要的工作,因此我尝试了其他可以与 cygwin 交互的终端仿真器。当我使用 Cv 查看服务器看到的内容时,MinTTY 显示了不同的代码,包括:
C-(箭头键)和(箭头键)的不同代码、
CM 表示 Return、C-^ 表示 C-Return,
以及 meta'd tab 和 backspace 的不同代码;
这意味着这些键现在注册为不同的,因此可以配置 emacs 以将它们用于不同的用途,例如 CM 可以是“换行和缩进”,而 C-^ 是“cua-set-rectangle-mode”。我一直在尝试修复我的 SSHed emacs 会话……
有关 emacs 的更多详细信息以及一般的键码,我还发现这
答案3
是的,有很多参与者决定如何解释您的按键。如果您连接的是远程系统,那么 PuTTY 或您的终端仿真器可能是瓶颈——也就是说,如果它为 up 和 control-up 发送相同的数据,那么您在下游所做的任何事情都无法恢复差异。对于每个参与者来说都是如此,但我知道大多数其他参与者都是可配置的。我不知道您的终端仿真器的可配置性如何。有些即使能够看到 up 和 control-up 之间的差异,仍会向它们连接的进程发送相同的数据。
您是否在 Windows 中运行 PuTTYTel?那么其他人将不得不帮助您弄清楚如何让 PuTTYTel 检测 up 和 control-up 之间的差异,并为每个差异发送不同的数据。我只知道 *nix。
回车键和删除键等发送的键取决于终端仿真器设置的 TERM。您应该能够在另一端使用任何有 terminfo 文件的东西。在我的计算机上,vt100 的 terminfo 文件显示回车键应该是 ^M,而不是 ^J。(vt100 中的退格键是 ^H。)所以我不知道您有多依赖这个终端仿真器……
在 xterm 中,退格键也是 ^H。在其他 terminfo 定义中,它是 ^?,即 0x7f。例如,在“linux”和“rxvt-unicode”terminfo 定义中,这是正确的。
答案4
您想要的按键在vt100。它们根本无法与该终端类型共存。尝试将仿真设置为 xterm 或 rxvt(如果您使用可以进行 xterm 仿真的终端仿真器,它甚至可以与另一端的应用程序共享鼠标信息)。