Macos 在终端中设置颜色会导致奇怪的字符行限制

Macos 在终端中设置颜色会导致奇怪的字符行限制,macos,terminal,command-line,iterm,Macos,Terminal,Command Line,Iterm,我在给终端的提示符上色时发现了一个恼人的错误。如果我将提示符设置为彩色,例如 export PS1='\e[1;34m[\e[0;31m\D{%Hh%M} \e[0;32m\u\e[0m@\e[0;35m\h\e[0m:\e[0;36m\w\e[1;34m]\e[0m $ ' 然后,当我在输入行中获得一些大小时,它开始中断: 换句话说,当我的线达到某个极限时,它会重新开始!一旦我再次填充同一行,它就会工作正常,进入下一行 有人也看到过这个问题吗?你有解决办法吗?该问题也发生在iTerm中。这

我在给终端的提示符上色时发现了一个恼人的错误。如果我将提示符设置为彩色,例如

export PS1='\e[1;34m[\e[0;31m\D{%Hh%M} \e[0;32m\u\e[0m@\e[0;35m\h\e[0m:\e[0;36m\w\e[1;34m]\e[0m $ '
然后,当我在输入行中获得一些大小时,它开始中断:

换句话说,当我的线达到某个极限时,它会重新开始!一旦我再次填充同一行,它就会工作正常,进入下一行

有人也看到过这个问题吗?你有解决办法吗?该问题也发生在iTerm中。

这是来自StackOverflow的副本。问题是,必须将终端控制字符括在方括号中
\[…\]
,以便bash shell在计算命令提示符的长度时不会对它们进行计数


由于这是一个通用的shell/terminal问题,并不特定于Mac OS X或terminal,因此可能应该将其迁移到StackOverflow,并复制另一个问题。(不过,我也没有这样做的特权。)

你的语法太糟糕了。粗略地看一下,您没有一个硬括号来将其全部关闭(在$之前)。还有其他问题。我建议重新开始。下面是着色指南:旁注:自定义提示时,请使用
\$
而不是文字美元符号。Bash将显示适当的提示字符(对于普通用户,
$
,对于root用户,
#
)。另一个风格提示:不要硬编码转义序列(我知道大多数人会,但他们不应该)。相反,请使用
tput
为当前终端发出适当的代码,以便它与各种终端一起正常工作。特别是,如果终端不支持提示中的颜色/样式,它将不会输出任何内容,而不会发出可能会混淆终端的字符。e、 例如,
PS1=“\[$(tput setaf 1)\]\h:\W\[$(tput sgr0)\]\u\$”
将以红色显示主机名和工作目录。正确答案可能重复,但我认为可以将其保留在不同的位置,因为有此问题的苹果用户不太可能去Stackoverflow寻求答案