大约 50 个字符后终端行重置

Terminal line resetting after about 50 characters

我的命令行提示符将在大约 50 个字符后重置,包括提示符。例如,如果提示如下:

user@computer$ 

然后我开始打字

user@computer$ blah blah blah blah blah blah

我最终会到达命令行开始重置的地步,如下所示:

blah blmputer$ blah blah blah blah blah blah

有谁知道为什么会这样,我该如何解决?最初我认为这是 iTerm 的问题,但我查看了默认的 OS X 终端并遇到了同样的问题。

编辑:深入研究后我意识到该行总是从 window 的末尾重置固定数量的字符,而不是从头开始。

通常的原因是没有引用转义序列用于在 bash shell 中为提示着色或突出显示。如果您不这样做,bash 会将转义字符计为 "printing"。这同样适用于 zsh(不同的引用),但 bash 恰好是默认 shell 和 OSX.

根据 xterm 手册:

  • bash 将“[”和“]”中的字符视为非打印字符(在屏幕上不使用宽度)。

  • zsh 将“%{”和“%}”中的字符视为非打印字符。

要更改的地方是您 shell 对 PS1 的定义。 Bash Prompt HOWTO 是阅读更多内容的好地方。