为什么某些(通常很长的)命令在 bash 和 zsh 中会出现乱码?

为什么某些(通常很长的)命令在 bash 和 zsh 中会出现乱码?

很多时候,当我在 bash 或 zsh 中输入一个长命令时(我确信这两个 shell 中只有这两个 shell 出现过这种情况),光标会转到我输入的字符串中间的某个位置,有人能解释一下这是为什么吗,以及是否可以做些什么来解决这个问题?

我注意到,当我浏览我的 shell 的历史记录(使用箭头键)时,经常会发生这种情况,当我遇到一个长条目时,长的新条目会与前一个条目混合,导致文本混乱。

我有一个带有短字符串的示例,我刚刚注意到:

历史包含:

mkdir sune1
mkdir sune2

如果我导航到mkdir sune1,然后导航到mkdir sune2,我希望我的命令行是mkdir sune2(因为这是我现在导航到的) - 但我得到的是mkdir1sune2

多年来我经常注意到这一点,但从未让它困扰我太多,但我想是时候做出改变了!那么,有什么想法吗?

答案1

您的提示字符串可能错误地转义了非打印字符。如果您的提示中有颜色变化之类的内容,则需要在终端转义序列周围放置\[\],以便 bash 可以知道它们不会占用屏幕空间 — 否则它会错误计算实际命令在屏幕上的位置,并在错误的位置更新它。请参阅此部分来自 TLDP. 在 zsh 中,将%{%}放在转义序列周围。

相关内容