bash 提示 - 添加颜色后长命令圈回到同一行

mtk*_*mtk 3 colors bash prompt

注意:我正在使用 Putty,并且我的 TERM 设置为 XTERM。

我已将颜色添加到我的 bash 提示中

PS1="\[\033[0;32m\]\d \t \u\e[1;33m@\H /\W $ \[\033[1;37m\]"
Run Code Online (Sandbox Code Playgroud)

只是为了用英文简化 PS1 -

${GREEN}\d \t \u{YELLOW}@\H \W $ {reset-color}
Run Code Online (Sandbox Code Playgroud)

现在,每当我的命令很长并且不适合屏幕行时,它应该转到下一行,但它不会并且初始字符开始被替换我键入的每个字符。整个命令都存在,但没有完全看到。它正常执行,所以只是显示失真。

当我回到第一个字符并尝试删除字符时,情况变得更糟,整个命令行向上移动并擦除屏幕上的先前数据。

经过一些试验和错误删除某些部分后,我发现添加 a@会导致上述行为

\e[1;33m
Run Code Online (Sandbox Code Playgroud)

我真的不记得为什么我放了这个,我无法追溯到这个。

你能帮我解决这个问题吗?长命令应该在下一行而不是在同一行。

man*_*ork 5

“@”符号之前的 ANSI 转义序列未包含在\[and 中\]。附上它,应该没问题:

PS1='\[\033[0;32m\]\d \t \u\[\e[1;33m\]@\H /\W $ \[\033[1;37m\]'
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你所说的“重置颜色”只是将其设置为白色。要实际重置它,请使用\033[0m.