为什么使用 SSH 在 vi​​m 中 Backspace 的行为会发生变化?

LB4*_*B40 7 vim

当我通过 ssh 访问一台特定的机器时,vim 中 Backspace 的行为会发生变化。而不是删除字符,我有一个 ^? .

问题是这台机器充当网关,当我访问这个网关后面的任何机器时,这个问题就会传播(当我在域内 ssh-ing 任何这些机器时 - 不通过域 -,我不有这个问题)...

这没什么大不了的,但真的很烦人。

任何的想法 ?

小智 9

通常是 shell 中配置的内容与终端模拟器中配置的内容不匹配。

有些使用退格键 (0x08),有些使用 DEL (0x7f)。如果在终端会话中运行

stty -a
Run Code Online (Sandbox Code Playgroud)

你会看到一行:

intr = ^C; quit = ^\; erase = ^?; kill = ^U; ...
Run Code Online (Sandbox Code Playgroud)

该擦除是 DEL 字符。您需要配置 SSH 以传输该字符或执行以下操作:

stty erase '^H'
Run Code Online (Sandbox Code Playgroud)

换壳。

我知道 Putty 可以在您按下退格键时更改传输的字符。我认为它隐藏在终端部分的某个地方(至少在 v 0.58 中),但我没有方便的 Windows 来检查它。

但是,它并不是真正与编程相关的,因此您可能会发现它已转移到 superuser.com。