Dut*_*n18 11 backspace escape-sequences mobaxterm
长问题:
我正在尝试通过 Telnet 发送大量请求并查看服务器的反应来测试我的简单 HTTP 服务器。但是当我打错字并按 Backspace 删除前一个字符时,MobaXterm 会发送^H
而不是从字符串中删除该字符。当我按下 Shift+Backspace 时,一切都按照我想要的方式工作,但过了一段时间,这变得非常烦人......那么,有没有一种解决方案可以改变退格键的功能?
简短的问题:
是否可以让退格键删除字符而不是发送^H
?
Did*_*ier 16
MobaXterm 还提出了一个复选框设置“Backspace 发送 ^H”,您可以尝试切换它(在 MobaXterm 全局设置 -->“终端”选项卡中)。
如果您使用的是保存的会话,则必须编辑此会话,转到“终端设置”选项卡并切换“退格发送 ^H”复选框。
标记为“退格”的键是一个争论问题。从技术上讲,它应该简单地发送^H
,因为这是 ASCII 控制字符的名称。其他人则有所不同,因为他们的期望受到此功能历史的影响(请参阅为什么我的删除键不起作用?)。
在您说您正在输入的讨论中,通常的含义(缺乏说明)是您已经启动了一个终端,然后在终端中运行一个程序。对于这种情况,存在相应的终端初始化,例如,使用诸如 之类的 shell 和程序stty
。这是在本地计算机(您正在输入的位置)上运行的。MobaXterm从版本 3.2 (2011-05-30) 开始提供 stty
。
鉴于此,如果 MobaXterm 发送^H
,您的终端初始化应该使用
stty erase \^H
Run Code Online (Sandbox Code Playgroud)
例如,请参阅该命令的stty erase ^H
作用是什么?。
另一方面,您可能(在问题中不明显)构建了一种情况,其中终端以阻止使用stty
使应用程序和终端保持一致的方式启动。或者您可能有其他原因需要更改退格键的行为。PuTTY(如 xterm)为此提供了两种机制:
^H
^?
xterm 提供了 PuTTY 似乎缺乏的第三种机制(请参阅XTerm 控制序列):
CSI ? Pm h
DEC Private Mode Set (DECSET).
Ps = 6 7 -> Backarrow key sends backspace (DECBKM).
Run Code Online (Sandbox Code Playgroud)
如果 PuTTY 确实实现了这一点,您的应用程序可以直接设置终端的行为。相反,在初始化期间,PuTTY 检查其配置的初始状态,并且(取决于平台)还检查(如 xterm)设备中设置的终端模式,并选择退格与删除行为,您可以按照说明进行调整或修改。
在 MobaXterm 中,有一个选项可以更改退格键的行为。(以下回答基于 MobaXterm 个人版 v11.1)
该选项称为:“退格发送 CTRL-H”
该选项仅显示在特定于会话的配置中,而不显示在全局设置中:在 Moba 中创建/编辑 SSH 类型的新/现有用户会话,并访问其设置。在“终端设置”选项卡下,取消选中“退格发送 CTRL-H”,保存并重新加载。
可以更改所有会话的行为吗?我还没有想出一种方法来改变全局的行为。MobaXterm 下面使用 Putty 代码,它确实有相应的退格键行为切换设置,但不幸的是,它没有暴露在 MobaXTerm 的全局设置窗口中。反正不是免费版本。
Moba 的专业版确实提供了一个单独的配置工具,可以向您显示更多的配置选项。我怀疑这可能会转化为 MobaXTerm.ini 设置。我无法验证。
替代方法:更改服务器上的行为
如果您ssh <server>
从未连接到任何用户会话的本地终端登录,则应用全局设置——即发送^H
. 这会导致编辑器(即 emacs)和其他任何使用 readline(如 telnet)的问题。一种解决方法是通过发出 stty 命令来修补远程站点上的终端行为(在 debian 上,这随 package 一起提供coreutils
):
# interpret incoming ^H as backspace/erase
stty erase \^H
Run Code Online (Sandbox Code Playgroud)
但是,如果您通过其他类型的终端登录,我不建议将它添加到 ~/.bashrc 中。所以用户会话配置键是一个更好的方法。