我刚刚遇到了一个奇怪的问题。当我用 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 问题的一部分 —— 它依赖于每个人都有相同的名字、每个人都被更新等等。没有进行任何协商。