1

我在 .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)

换句话说,前一个命令的一部分没有完全删除,导致出现令人困惑的字符串,尽管执行该命令将正常运行(而不是文本出现)。请注意,最后发出的“down”也可以替换为“up”,问题仍然存在。

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

4

1 回答 1

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\] '
于 2013-07-15T03:23:04.907 回答