Macos 自定义端子提示颜色会导致循环问题

Macos 自定义端子提示颜色会导致循环问题,macos,colors,terminal,.bash-profile,Macos,Colors,Terminal,.bash Profile,我在.bashprofile中创建了一个自定义Mac终端提示符,其中包含以下行: export PS1='\e[0;36m\][\u] \w:\e[0;31m\]$(__git_ps1 " (%s)") \e[00m\n\e[1;33m\]\342\230\200 >\e[0m\] ' 这里发生了很多事情,但我已将罪犯隔离为“\e”。。。零件,用于控制文本显示时的颜色 虽然生成的文本提示符本身非常准确,功能正常,没有问题,但在使用箭头键循环执行过去的命令时,我遇到了一个奇怪的错误。似乎当

我在.bashprofile中创建了一个自定义Mac终端提示符,其中包含以下行:

export PS1='\e[0;36m\][\u] \w:\e[0;31m\]$(__git_ps1 " (%s)") \e[00m\n\e[1;33m\]\342\230\200 >\e[0m\] '
这里发生了很多事情,但我已将罪犯隔离为“\e”。。。零件,用于控制文本显示时的颜色

虽然生成的文本提示符本身非常准确,功能正常,没有问题,但在使用箭头键循环执行过去的命令时,我遇到了一个奇怪的错误。似乎当循环并到达某个任意字符长度的命令(例如18)时,在继续循环时,前几个字符不再被删除,导致各种输入的外观不准确(尽管功能正确)。这有点难以解释,因此下面是一个带有提示(“>”)和用星号表示“向上”或“向下”的按键的示例:

> vim sample.txt                             ** up **
> vim test.txt                               ** up **   (no problems so far)
> cd /Documents/Test_Folder/sample/foo.txt   **down**
> cd /Documvim text.txt                                 (the issue is visible)
换句话说,前一个命令的一部分没有完全删除,导致出现一个混乱的字符串,尽管执行该命令将正常工作(与文本显示的情况不同)。请注意,上一次发出的“向下”也可以替换为“向上”,并且问题仍然会发生


是否有人能解释为什么会发生这种情况,或者是否有替代“\e”的方法来更改Mac终端颜色,从而避免此问题

您需要在提示符中用
\[\]
包围非打印字符,以便bash能够准确计算提示符的长度。看起来你有(大多数)这些对的结尾,但没有开始-也许你认为
\e[…
序列必须关闭?它们没有。下面是它应该是什么样子:

export PS1='\[\e[0;36m\][\u] \w:\[\e[0;31m\]$(__git_ps1 " (%s)") \[\e[00m\]\n\[\e[1;33m\]\342\230\200 >\[\e[0m\] '

太感谢了!这很容易就解决了。奇怪的是,我在谷歌上找到的大多数东西都缺少这个“。。。