MobaXterm 退格键发送 ^H

Dut*_*n18 11 backspace escape-sequences mobaxterm

长问题: 我正在尝试通过 Telnet 发送大量请求并查看服务器的反应来测试我的简单 HTTP 服务器。但是当我打错字并按 Backspace 删除前一个字符时,MobaXterm 会发送^H而不是从字符串中删除该字符。当我按下 Shift+Backspace 时,一切都按照我想要的方式工作,但过了一段时间,这变得非常烦人......那么,有没有一种解决方案可以改变退格键的功能?

简短的问题: 是否可以让退格键删除字符而不是发送^H

Did*_*ier 16

MobaXterm 还提出了一个复选框设置“Backspace 发送 ^H”,您可以尝试切换它(在 MobaXterm 全局设置 -->“终端”选项卡中)。

如果您使用的是保存的会话,则必须编辑此会话,转到“终端设置”选项卡并切换“退格发送 ^H”复选框。


Tho*_*key 5

标记为“退格”的键是一个争论问题。从技术上讲,它应该简单地发送^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)为此提供了两种机制:

  • 一个(最初在 rxvt 中实现)允许您使用修饰符在 ASCII 退格键 (BS = 8 = ) 和删除键 (DEL = 127,通常显示为)shift之间切换从“退格键”发送的代码。^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)设备中设置的终端模式,并选择退格与删除行为,您可以按照说明进行调整或修改。


ini*_*_js 5

在 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 中。所以用户会话配置键是一个更好的方法。