Bashプロンプトは長い行を包みません。すべてがエスケープされたと仮定しますか?

Bashプロンプトは長い行を包みません。すべてがエスケープされたと仮定しますか?

これは私のものです。.bash_profile

export CLICOLOR=1
export LSCOLORS=exfxcxdxbxegedabagacad

# define colors
C_DEFAULT="\[\033[m\]"
C_WHITE="\[\033[1m\]"
C_BLACK="\[\033[30m\]"
C_RED="\[\033[31m\]"
C_GREEN="\[\033[32m\]"
C_YELLOW="\[\033[33m\]"
C_BLUE="\[\033[34m\]"
C_PURPLE="\[\033[35m\]"
C_CYAN="\[\033[36m\]"
C_LIGHTGRAY="\[\033[37m\]"
C_DARKGRAY="\[\033[1;30m\]"
C_LIGHTRED="\[\033[1;31m\]"
C_LIGHTGREEN="\[\033[1;32m\]"
C_LIGHTYELLOW="\[\033[1;33m\]"
C_LIGHTBLUE="\[\033[1;34m\]"
C_LIGHTPURPLE="\[\033[1;35m\]"
C_LIGHTCYAN="\[\033[1;36m\]"
C_BG_BLACK="\[\033[40m\]"
C_BG_RED="\[\033[41m\]"
C_BG_GREEN="\[\033[42m\]"
C_BG_YELLOW="\[\033[43m\]"
C_BG_BLUE="\[\033[44m\]"
C_BG_PURPLE="\[\033[45m\]"
C_BG_CYAN="\[\033[46m\]"
C_BG_LIGHTGRAY="\[\033[47m\]"

# Prompt
if [ -f $(brew --prefix)/etc/bash_completion ]; then
  . $(brew --prefix)/etc/bash_completion
fi

source $(brew --prefix)/etc/bash_completion.d/git-prompt.sh
GIT_PS1_SHOWDIRTYSTATE=true

# PS1="\h:\W \u\$(__git_ps1 \" (%s) \")\$"
PS1="$C_YELLOW\w $C_PURPLE\$(__git_ps1 \"(%s) \")$C_DEFAULT\n ☠️   "

長い行を入力/コピーして貼り付けると、新しい行に移動しません。代わりに既存の項目を上書きします。最初に戻っても、すべての文字が削除されるわけではありません。

他の答えのいくつかを見てみると、すべての梱包が問題である可能性があると提案しましたが、すべてが正しく梱包されていると思いますか?

答え1

**クリストファーの答えで問題が解決しない場合...

すべて\[エスケープコードはとで囲む必要があります\]。 1つまたは一致しないペアを見逃すと、今見ているような問題が発生する可能性があります。内容が何であるかわからない__git_ps1ので、何が間違っているのかを言うのは難しいです。

それでも問題が解決しない場合は、ここにいくつかの「デバッグのヒント」があります。 :)プロンプトをテキストファイルにダンプしてから実行すると、これを行うことができますvi。これにより、何もレンダリングされずに実際の文字を表示できます(echo $PS1たとえば、コマンドラインで実行するものと比較)。

echo $PS1 > ps1
vi ps1

コードが多い場合は、:%s/\\[//n括弧の数が一致するかどうかを入力して確認してください:%s/\\]//n。これにより、エスケープされた角かっこを開閉する回数が提供されます。少なくとも2つの数が等しいことを確認して、ペアのない角括弧を除外できます。 (私はかなり複雑なプロンプトを持っていて、不一致エラーのために何度も困難を経験しました!)

まだわかりませんか?私たちがスキャンできるように、このファイルの内容をここにコピーしてください。

答え2

BASHはすべての文字(印刷可能かどうか)をプロンプト長として計算します。計算されたプロンプトの長さによって、改行が発生する場所が決まります。計算された長さは変更する必要がある変数です。 ☠️の後にスペースを削除して別のスペースを追加すると、\[ \]BASHはmacOS High Sierra、BASH 4.4.12、およびiTerm 3.1.4を使用している現在のコンピュータで改行位置を正しく計算します。

PS1="$C_YELLOW\w $C_PURPLE\$(__git_ps1 \"(%s) \")$C_DEFAULT\n☠️\[ \]"

関連情報