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

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

我刚刚遇到了一个奇怪的问题。当我用 SSH 连接到我的服务器(centos,zsh)并输入一些内容并按下退格键时,它看起来就像一个空格 - 但在内部它确实删除了字符。

ls -l a

l请注意,和之间的空格a实际上是我按下退格键时出现的。现在按下回车键时,ls -a就会执行。这只在 zsh 中有效,在 bash 中可以正常工作。

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

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

我也无法清除屏幕:

helium:~% echo $TERM
screen-256color
helium:~% clear
'screen-256color': unknown terminal type.

答案1

这很不寻常。我首先会查看 Ctrl-L 是否有效(即 zsh 是否知道您的终端并可以发出清除屏幕命令),然后运行echo $TERM以查看 zsh 从 Terminal.app 接收到了什么终端类型;我让 Terminal.app 发送xterm-color,这似乎是可移植的并且可以接受。

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

[更新后屏幕信息:]

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

case ${TERM} in
  screen-256color) TERM=screen.xterm-xfree86
  ;;
esac

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

相关内容