2013-07-15 31 views
1

我創建了一個定製的Mac終端提示與.bashprofile以下行:定製終端提示的顏色會導致循環問題

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

的可能重複(http://stackoverflow.com/questions/17306348/long-lines-overlap-in-bash-ps1- [長行的Bash PS1提示重疊]提示) – Kevin

回答

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\] ' 
+0

非常感謝!這很容易解決。奇怪的是,我發現在谷歌上的大多數東西都沒有這個「關閉」,因爲\] ... – kgong