これは私の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 のローカルでも、Ubuntu サーバーに SSH 接続する場合 (OSX および Windows の PuTTY 経由) でも発生します。
たとえば、次のようなことが起こります。最初にタブ補完で「git add [filename]」と入力し、次に「Home」キーを押して行の先頭に戻り、「git add」を「vi」に置き換えます。ご覧のとおり、かなりめちゃくちゃになっています。
また、行の末尾に到達するために「End」を押すと、「.php」をはるかに超えていくつかの空白スペースが残ります。
これは、新しい行を編集するときと、履歴内の行を編集するときの両方で発生します (上矢印を使用)。正しく表示されますが、矢印キーまたは Home/End を使用するとすぐに混乱します)
Ctrl+L を押してクリアしても問題は解決しません。基本的に、問題を回避するには、最初からやり直して行全体を再入力する必要があります。
答え1
この行
PS1+="\$(prompt_git \"${blue}\")"; # Git repository details
\[
bash が使用する、囲まれた各文字の列数を数えないよう指示するおよびマーカーがありません\]
。特に指示がない場合は、印刷可能な文字を数えるものとみなします。
議論のため:
- 3.4. プロンプト内の非表示文字(Bash プロンプト HOWTO)
- 色を変える(xterm マニュアル)