使用 tmux/screen SSH 进入 zsh 时,Terminal.app 中退格的奇怪行为/渲染

Nil*_*ann 4 ssh terminal zsh terminal.app

我只是偶然发现了一个奇怪的问题。当我通过 SSH 连接到我的服务器(centos、zsh)并输入一些内容并按退格键时,它看起来像一个空格 - 但在内部它确实删除了字符。

ls -l a
Run Code Online (Sandbox Code Playgroud)

需要注意的是之间的空间la实际上是当我打Backspace键。当我现在点击返回时ls -a被执行。这仅在 zsh 中,在 bash 中它工作正常。

希望任何人都知道这是怎么回事以及如何解决这个问题。

更新:仅在使用 tmux/screen 时发生

我也无法清除屏幕:

helium:~% echo $TERM
screen-256color
helium:~% clear
'screen-256color': unknown terminal type.
Run Code Online (Sandbox Code Playgroud)

Phi*_*l P 5

这是不寻常的。我首先查看 Ctrl-L 是否有效(即 zsh 知道您的终端并且可以发出清晰的屏幕)并运行echo $TERM以查看从 Terminal.app 收到的终端类型 zsh;我有 Terminal.app 发送xterm-color,这似乎是便携和接受的。

要检查的另一件事是键入 Ctrl-H 时会发生什么,但我认为所有现代系统都已将退格键设置为 0x7F。

[更新后的屏幕信息:]

Bash 有更多的内置技巧,用于假设缺少的终端类型是 ANSI-ish,但您的根本问题$TERM是无法识别。这将破坏大多数想要向终端模拟器发出控制指令的应用程序。覆盖$TERM您的~/.zprofile

case ${TERM} in
  screen-256color) TERM=screen.xterm-xfree86
  ;;
esac
Run Code Online (Sandbox Code Playgroud)

这是 termcap/terminfo 问题的一部分——它依赖于每个人都有相同的名字,每个人都被更新,等等。没有进行协商。