bash 提示字元中 256 位元顏色代碼的問題

bash 提示字元中 256 位元顏色代碼的問題

這是我的 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 使用\[\]標記來告訴它不計算所包含的每個字元的列數。如果沒有另外說明,它假定應該計算可列印字元。

供討論:

相關內容