自定义终端提示颜色导致循环问题

时间:2013-07-15 03:14:03

标签: 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'...部分,它控制文本的颜色。

虽然生成的文本提示本身非常准确且功能正常但没有问题,但使用箭头键循环浏览过去的命令时会出现奇怪的错误。似乎在循环并达到某个任意字符长度(例如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终端颜色以避免此问题?

1 个答案:

答案 0 :(得分:2)

您需要使用\[\]在提示中包围非打印字符,以便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\] '