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を介して(OSXおよびWindowsではPuTTYを介して)Ubuntuサーバーに接続するときに発生します。

たとえば、これが起こります。まず、「git add [filename]」と入力し、タブ補完を使用してから「Home」キーを押して前の行に戻り、「git add」を「vi」に置き換えました。ご覧のとおり、非常に混乱しています。

ここに画像の説明を入力してください。

また、行末に移動するために「終了」をクリックすると、いくつかのスペースがある「.php」を通過します。

ここに画像の説明を入力してください。

これは、新しい行を編集するときと履歴で行を編集するときに発生します(上矢印を使用しています。正しく表示されますが、矢印キーまたはHome / Endを使用するとすぐに混乱します)。

Ctrl + Lを押しても消去しても問題は解決しません。既定では、問題を回避するには、最初から再開して行全体を再入力する必要があります。

答え1

この行

PS1+="\$(prompt_git \"${blue}\")"; # Git repository details

含まれる各文字の列数を数えないように指示するbashの使用と\[フラグはありません。\]特に明記しない場合、印刷可能な文字も計算されると見なされます。

議論のため:

関連情報