web-dev-qa-db-ja.com

それ自体の上にOS Xターミナルテキストスタック

Mac OS X Lionのターミナルアプリで奇妙な問題が発生しています。ターミナルウィンドウの端に達したときに次の行に折り返される長いテキスト行を入力すると、その上の行のテキストの上に入力し続けます。

問題の説明に役立つスクリーンショットをいくつか示します:

テキストがウィンドウEdgeに到達する前:

before

テキストがウィンドウEdgeに到達した後:

after

テキストとウィンドウの設定のスクリーンショットも提供します。

テキスト設定:

text

ウィンドウ設定:

window

提供された支援を事前に感謝します。私はしばらくの間この問題を抱えていて、それを回避することができませんでした。大きなgrepコマンドと長いパス名を必要とするものに入ると、今は本当にお尻の痛みになっています。

44
Daryn

PS1環境変数は、シェルのプロンプトの外観を決定します。 man bashは、それに関する完全なドキュメントを提供します。 (実際には、いくつかのモードがあり、モードが異なります)。

それを設定している可能性のあるファイルがいくつかあり、通常は~/.profile~/.bashrc/etc/profileまたは/etc/bashrcのいずれかです。

内部にカラーコードまたはその他の制御シーケンスを含める場合は、それらを\[および\]で適切にラップする必要があります(通常のテキストをラップしないでください)。あなたの場合。 PS1をデフォルト値にリセットしてから、アイテムごとに慎重にカラーバックを追加することをお勧めします。

例えば:

PS1='\[\033[1m\033[32m\]\u@\h \w\[\033[0m\]\$ '
       ^^^^^^^^^^^^^^^            ^^^^^^^

着色コマンドには下線が引かれています。それらが\[ \]で囲まれていることに注意してください。

68
hamstergene

私は同じ問題を抱えています、あなたが変えるなら私は見つけました

Advanced>Emulation>端末をANSIとして宣言します。

これにより、カラーPS1の問題が解決されます。 Macターミナル

[〜#〜] but [〜#〜]は奇妙な動作を引き起こします:@koiyuの答えで私の問題の解決策を見つけました。

https://Apple.stackexchange.com/questions/37001/strange-behavior-in-terminal-with-custom-bash-profile/37036#37036

7
guneysus

色コードを誤って使用していたため、以前は同じ問題がありました。これは問題を解決した私の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 $ "

お役に立てれば。

6
Jazzer

hamstergene の指導により、Niceを再生する方法を理解することができました。 this Geek Stuff guidethis It's Me Tommy tutorial を使用して、PS1テキストの表示方法を定義できました。これをもっと単純なものに変更すると、私が遭遇していた奇妙な重複するテキストの問題が解消されました。

前:

before

後:

after

私は単に.bash_profileと次の行を追加しました:

export PS1="[\u@\h] > ";

それから私は行って、できる限り良いようにウィンドウの色を変更しました。

2
Daryn

他の人が言ったように、エスケープされた角括弧で色コマンドを適切に囲む必要があります。しかし、私にとって、これは文字列を本当に、非常に混乱させるものにします!

そういうわけで、これは私が常に正しく理解し、さらに読みやすくするために使用するトリックです。

最初に、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;4192\;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)\$ "

お役に立てれば!

0
Mark A. Donohoe

元の問題は、PS1に新しい行があったことでした(これに遭遇した人のためのFYI)

通常、不適切にエスケープされたカラーコードですが、そうでない場合は、ps1に新しい行があります。

0
DebugXYZ