2009-07-15 5 views
35

OS X(10.5.7)のターミナルでBashシェルプロンプトを壊したことがあります。シェルプロンプト行折り返し問題

PS1='\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\$ ' 

を私の知る限り、私は正しくエスケープカラーコマンドを持って言うことができるように:

これは私が設定されていたPS1です。しかし、私がコマンド履歴で上下にスクロールすると、歴史的なコマンドが複数の行に折り返されてしまうと、行折り返しの問題が発生することがよくあります。

私を次のように私のプロンプトを簡素化:

PS1='\[\e[1m\]\h:\w\$ \[\e[0m\]' 
PS2='> ' 

そして、私はまだのようなものを参照してください。私も\033代わりの\eを試してみた

localhost:~/Library/Application Support/Firefox/Profiles/knpmxpup.Defau 
lt/extensions/{1A2D0EC4-75F5-4c91-89C4-3656F6E44B68}$ expocd \{1A2D0EC4-7 
5F5-4c91-89C4-3656F6E           export PS1="\[ 
\e[1;32m\]\h\[\e[0m\]:           cd Library/Appl 
ication\ Support/

を。私はちょうど情報のためにそこにPS2を含めた、私はデフォルトのインストールからそれを変更していない。色のコードを完全に削除すると、すべてのアイデアはうまくいきますか?

+0

'$ TERM'とは何ですか?私が正しくリコールすれば、Terminal.appの端末エミュレーションはterminfoデータベース内の何かまで正確には一致しませんが、 'dtterm'は近いです。 – ephemient

+0

私はあなたのPS1をFedora8のbash 3.2.33で試しました。端末の幅を動的に変更しても長い行でも問題なく動作します。高さを変更すると重複した行が印刷されますが、Ctrl-Lで修正されます。バグかもしれません... – neuro

+0

@ephemient my $ TERMは 'xterm-color' – Rob

答えて

2

Bashの改行問題は新しいものではありません。メーリングリストに相談してください。おそらくこれに関する別のバグがあります。

印刷できない文字にはタグを付ける以上のことはできません。残りはプロンプトコードで行う必要があります。

+0

ありがとう、私は物事を正しくエスケープしたことを確認したかっただけです。 – Rob

1

正しくエスケープして囲まれたシーケンスがあるようです。

私はとにかく最後に '\ n'を追加します。ラッピング問題の問題をより明確にし、軽減します。私のPS1の正確な終わりは次のとおりです。

'\n\[\033[0;30m\]$\[\033[0m\] 

優れたHOWTOあなたはおそらく知っている:

Bash prompt howto

20

This stackoverflow threadが関連すると思われます。そのスレッドで指摘されているように、Bash FAQ at mywiki.wooledge.orgは、Bashプロンプト(FAQ 53)でカラーコードを正しく引用する方法と、ターミナルカラー(FAQ 37)を適切に呼び出す方法について説明しています。今

green=$(tput setaf 2) 
blue=$(tput setaf 4) 
bold=$(tput bold) 
reset=$(tput sgr0) 
PS1="\[$green$bold\]\h\[$reset\]:\[$blue$bold\]\w\[$reset\]\$ " 

私のコマンド履歴をスクロールラップの行を処理するために表示されます。

+0

このFAQに記載されているように、tputを使用してカラーコードを生成する: http://mywiki.wooledge。org/BashFAQ/037 そして私のプロンプトがずっと良くなりました。しかし、私はOS Xの新しいバージョンにも乗っているので、これが修正されているかもしれません。 – Rob

45

私は今、良い効果を持つこのPS1を使用しています。この質問は、今後の参考のために、私はまた、10.6.3

+1

ありがとう!これは私を長い間夢中にさせてしまった。私はそのトリックが色をするあなたの方法だと思う。私は色のためにこのスタイルを使用していました(これは青い太字です):\ e [0; 34m –

+1

私のために働いても!お返事ありがとうございます。 –

+1

ありがとうございます!これは私を狂ってしまった。 – Joshua

0

に私のOS Xを更新した頼まれたので、しかしその間に、これは私が使用するものです。

export PS1="\[\033[0;31m\][\[email protected]:\w]$\[\033[0m\] "

これはと私のシェルプロンプトが表示されます:

[[email protected]:~]$

は私がライブやdevのサイトを区別するのに役立ちます。

+2

これはOPの質問と何が関係していますか? –

1

これは私が見つけた最高のものですが、私が最初に見つけたサイトではエスケープ文字が欠けていて、行の折り返しの問題が発生しています。私はそれを試して、ついにそれを働かせました。それはあなたのユーザー、パス、およびブランチ情報を良好なコントラストで、色ごとに表示します。

また
export PS1='\[\e[1;37m\]\[\e[1;32m\]\u\[\e[0;39m\]:\[\e[1;33m\]\w\[\e[0;39m\]\[\e[1;35m\]$(__git_ps1 " (%s)")\[\e[0;39m\] \[\e[1;37m\]|\[\e[0;39m\]\$' 

、スクロール時に

export HISTCONTROL=ignoredups 

も重複を無視するのに便利です(コミットする変更が存在する)の枝が「ダーティ」であるとき、マーカーを表示するには

GIT_PS1_SHOWDIRTYSTATE=true 

を追加bashの歴史を通して。

bind "set completion-ignore-case on" 

も参考にしてください。問題が解決しない場合は

最後に、

shopt -s checkwinsize 

はOSX上で役に立つかもしれません。

0

は「shopt -s checkwinsize」はまた、あなたがタイトルバーのトリック"\e]2;titlebar\a"を使用している場合は、あまりにもことを脱出することを確認し、また

0

を問題をラップCygwin用に動作します:"\[\e]2;titlebar\a\]"

1

私はいくつかがあることに気づきましたPS1またはPROMPT環境変数に特殊文字がなくても、プロンプトカーソルの配置に問題があります。

最後に行末文字がないファイルを出力した場合。それはプロンプトを混乱させます。

次の操作を行うことにより、これを再現することができます。

curl https://gist.githubusercontent.com/martinos/d4aa0a7d4d752b0d0d9f/raw/3198c39f84a080c44227a084a19fb3a0bb661ee5/wrapping_issue.txt

とアップキーを複数回押すと、あなたは、プロンプトが混乱していることがわかります。あなたはこの動作の例を見ることができます

https://asciinema.org/a/9mtjhi9dib6md4ocsbw210cca

これが発生すると、ちょうど<CTRL-C>を押すと、プロンプトは正常に戻ってきます。

ZShellにはこの問題はありません。

関連する問題