我使用.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终端颜色以避免此问题?
答案 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\] '