這是我的 bash 提示;我在用著ANSI 轉義序列
reset="\033[0m";
blue="\033[38;5;20m";
cyan="\033[38;5;38m";
green="\033[38;5;35m";
yellow="\033[38;5;227m";
white="\033[38;5;250m";
# Set the terminal title to the current working directory.
PS1="\[\033]0;\w\007\]";
PS1+="\[${yellow}\]\u"; # username
PS1+="\[${white}\]@";
PS1+="\[${green}\]\h"; # host
PS1+="\[${white}\]:";
PS1+="\[${cyan}\]\W"; # working directory
PS1+="\$(prompt_git \"${blue}\")"; # Git repository details
PS1+="\[${white}\]\$ \[${reset}\]"; # `$` (and reset color)
export PS1;
它看起來很棒,但有時終端在計算提示長度時似乎出現問題。這種情況在 OSX 本機以及透過 SSH 連接到 Ubuntu 伺服器時都會發生(在 OSX 上和透過 PuTTY 在 Windows 上)
例如,就會發生這種情況。我先輸入“git add [檔名]”並使用製表符補全,然後按“Home”鍵返回到該行的前面,並將“git add”替換為“vi”。正如你所看到的,它非常混亂。
另外,如果我點擊“End”到達該行的末尾,它會帶我經過幾個空格的“.php”。
在編輯新行和編輯歷史記錄中的行時都會發生這種情況(使用向上箭頭。它顯示正確,但一旦我使用箭頭鍵或 Home/End 它就會混亂)
按 Ctrl+L 清除並不能解決問題,我基本上必須重新開始並重新輸入整行以避免問題。
答案1
這條線
PS1+="\$(prompt_git \"${blue}\")"; # Git repository details
沒有bash 使用\[
和\]
標記來告訴它不計算所包含的每個字元的列數。如果沒有另外說明,它假定應該計算可列印字元。
供討論:
- 3.4.提示中的非列印字符(Bash 提示 HOWTO)
- 改變顏色(xterm 手冊)