Mac OS X Lionのターミナルアプリで奇妙な問題が発生しています。ターミナルウィンドウの端に達したときに次の行に折り返される長いテキスト行を入力すると、その上の行のテキストの上に入力し続けます。
問題の説明に役立つスクリーンショットをいくつか示します:
テキストがウィンドウEdgeに到達する前:
テキストがウィンドウEdgeに到達した後:
テキストとウィンドウの設定のスクリーンショットも提供します。
テキスト設定:
ウィンドウ設定:
提供された支援を事前に感謝します。私はしばらくの間この問題を抱えていて、それを回避することができませんでした。大きなgrepコマンドと長いパス名を必要とするものに入ると、今は本当にお尻の痛みになっています。
PS1
環境変数は、シェルのプロンプトの外観を決定します。 man bash
は、それに関する完全なドキュメントを提供します。 (実際には、いくつかのモードがあり、モードが異なります)。
それを設定している可能性のあるファイルがいくつかあり、通常は~/.profile
、~/.bashrc
、/etc/profile
または/etc/bashrc
のいずれかです。
内部にカラーコードまたはその他の制御シーケンスを含める場合は、それらを\[
および\]
で適切にラップする必要があります(通常のテキストをラップしないでください)。あなたの場合。 PS1
をデフォルト値にリセットしてから、アイテムごとに慎重にカラーバックを追加することをお勧めします。
例えば:
PS1='\[\033[1m\033[32m\]\u@\h \w\[\033[0m\]\$ '
^^^^^^^^^^^^^^^ ^^^^^^^
着色コマンドには下線が引かれています。それらが\[ \]
で囲まれていることに注意してください。
私は同じ問題を抱えています、あなたが変えるなら私は見つけました
Advanced>Emulation>端末をANSIとして宣言します。
これにより、カラーPS1の問題が解決されます。 Macターミナル
[〜#〜] but [〜#〜]は奇妙な動作を引き起こします:@koiyuの答えで私の問題の解決策を見つけました。
色コードを誤って使用していたため、以前は同じ問題がありました。これは問題を解決した私のPS1です。また、GITを使用している場合、これは、作業中のgitブランチを表示したり、作業ツリーがダーティかどうかを確認するのにも役立ちます。これを.profileまたは.bash_profileに入れます
# Git branch in Prompt.
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
parse_git_dirty() {
st=$(git status 2>/dev/null | tail -n 1)
if [[ $st == "" ]]; then
echo ''
Elif [[ $st == "nothing to commit (working directory clean)" ]]; then
echo ''
Elif [[ $st == 'nothing added to commit but untracked files present (use "git add" to track)' ]]; then
echo '?'
else
echo '*'
fi
}
# coloring the terminal comman line
SB_GREEN="\[\033[1;32m\]"
SB_BLUE="\[\033[1;34m\]"
SB_RED="\[\033[1;31m\]"
SB_NOCOLOR="\[\033[0m\]"
export PS1="$SB_GREEN\u@\h$SB_NOCOLOR: $SB_BLUE\w$SB_GREEN\$(parse_git_branch)$SB_RED\$(parse_git_dirty)$SB_NOCOLOR $ "
お役に立てれば。
hamstergene の指導により、Niceを再生する方法を理解することができました。 this Geek Stuff guide と this It's Me Tommy tutorial を使用して、PS1テキストの表示方法を定義できました。これをもっと単純なものに変更すると、私が遭遇していた奇妙な重複するテキストの問題が解消されました。
前:
後:
私は単に.bash_profile
と次の行を追加しました:
export PS1="[\u@\h] > ";
それから私は行って、できる限り良いようにウィンドウの色を変更しました。
他の人が言ったように、エスケープされた角括弧で色コマンドを適切に囲む必要があります。しかし、私にとって、これは文字列を本当に、非常に混乱させるものにします!
そういうわけで、これは私が常に正しく理解し、さらに読みやすくするために使用するトリックです。
最初に、setColor
というシェル関数を次のように作成します...
setColor(){
echo "\[\033[${1}m\]"
}
それから私はこのようにそれを使います...
PS1="$(setColor 92)\u$(setColor 37):$(setColor 96)\w $(setColor)\$ "
これはこれを書くのと同じです...
\[\033[92m\]\u\[\033[37m\]:\[\033[96m\]\w \[\033[m\]$
...しかし、ご覧のように、前者はより明確で、すべてが適切にエスケープされることを保証します。
;
文字を使用して、複数の色を指定することもできます。唯一のことは、明示的にエスケープする必要があるため、92;41
は92\;41
になります。
PS1="$(setColor 92\;41)\u$(setColor 37):$(setColor 96)\w $(setColor)\$ "
繰り返しますが、これよりもさらに読みやすくなっています...
\[\033[92;41m\]\u\[\033[37m\]:\[\033[96m\]\w \[\033[m\]$
これは、色の定数を定義することでさらに一歩進んだり、最もよく使用する色の名前で「ラッパー」関数を定義したりすることもできるので、次のように書くことができます...
PS1="$(setRed)\u$(setBlue):$(setGreen)\w $(resetColor)\$ "
お役に立てれば!
元の問題は、PS1に新しい行があったことでした(これに遭遇した人のためのFYI)
通常、不適切にエスケープされたカラーコードですが、そうでない場合は、ps1に新しい行があります。