これは私が使用している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の使用と\[
フラグはありません。\]
特に明記しない場合、印刷可能な文字も計算されると見なされます。
議論のため:
- 3.4。プロンプトに印刷されない文字(BashプロンプトHOWTO)
- 色を変える(xterm マニュアル)