OS X(10.5.7)ターミナルでBashシェルプロンプトを壊すために何かをしました。
これは私が設定したPS1です:
PS1='\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\$ '
私の知る限り、カラーコマンドは正しくエスケープしています。ただし、コマンド履歴を上下にスクロールすると、履歴コマンドが複数行に折り返されると、行折り返しの問題が頻繁に発生します。
プロンプトを次のように簡略化しました。
PS1='\[\e[1m\]\h:\w\$ \[\e[0m\]'
PS2='> '
そして、私はまだ次のようなものを見ます:
localhost:〜/ライブラリ/ 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 /アプリケーションのサポート/
私も試しました\033
の代わりに \e
。情報のためにそこにPS2を含めただけで、それをインストールのデフォルトから変更していません。カラーコードを完全に削除すると、すべてがうまく機能しますか?
Bashの行折り返しの問題は新しいものではありません。あなたのPS1
はそのまま動作するはずですが、Bash 3.2.49にはバグがあります。メーリングリストを参照してください まだこれに関する別のバグ がありました 4.0で修正されることが確認されました 。
印刷できない文字に\[
と\]
をタグ付けする以上のことはできません。残りはプロンプトコードで実行する必要があります。
私は今このPS1を良い効果で使用しています:
green=$(tput setaf 2)
blue=$(tput setaf 4)
bold=$(tput bold)
reset=$(tput sgr0)
PS1="\[$green$bold\]\h\[$reset\]:\[$blue$bold\]\w\[$reset\]\$ "
コマンド履歴をスクロールすると、行の折り返しを処理できるようになりました。しかし、この質問が出されて以来、私はOS Xを10.6.3にアップデートしました
このstackoverflowスレッド は関連があるようです。誰かがそのスレッドで述べたように、 Bash FAQ at mywiki.wooledge.org は、Bashプロンプトでカラーコードを適切に引用する方法について説明しています( FAQ 5 )、およびターミナルの色の適切な呼び出し( FAQ 37 )。
シーケンスを正しくエスケープして囲んだようです。
いずれにしても、最後に「\ n」を追加するための回避策です。私はそれをより明確にし、折り返しの問題を少しでも減らします。私のPS1の正確な終わりは:
'\n\[\033[0;30m\]$\[\033[0m\]
あなたがおそらく知っている優れたハウツー:
これが私のものです。これは私が見つけた中で最高のものですが、最初に見つけたサイトにはエスケープ文字がないため、行の折り返しの問題が発生していました。私はそれをいじくり回し、最終的にそれを動作させました。これは、ユーザー、パス、およびブランチの情報を色分けしてコントラストよく表示します。
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\]\$'
また、追加
GIT_PS1_SHOWDIRTYSTATE=true
ブランチが「ダーティ」な場合にマーカーを表示するには(コミットする変更が存在する)
export HISTCONTROL=ignoredups
Bash履歴を上にスクロールするときに重複を無視するのにも役立ちます。
bind "set completion-ignore-case on"
あまりにも役立ちます。
最後に、
shopt -s checkwinsize
問題が解決しない場合、OSXで役立つことがあります。
PS1
またはPrompt
環境変数に特殊文字がない場合でも、プロンプトカーソルの配置に問題があることに気付きました。
末尾に行末文字がないファイルを出力した場合。プロンプトを混乱させます。
これを再現するには、次のようにします。
curl https://Gist.githubusercontent.com/martinos/d4aa0a7d4d752b0d0d9f/raw/3198c39f84a080c44227a084a19fb3a0bb661ee5/wrapping_issue.txt
上キーを複数回押すと、プロンプトが混乱することがわかります。
実際のこの例を見ることができます:
https://asciinema.org/a/9mtjhi9dib6md4ocsbw210cca
これが発生したら、<CTRL-C>
を押すだけで、プロンプトが通常に戻ります。
ZShellにはこの問題がないことに注意してください。
'shopt -s checkwinsize'はCygwinのラップ問題でも機能します
タイトルバートリックを使用している場合"\e]2;titlebar\a"
、それもエスケープしてください:"\[\e]2;titlebar\a\]"
将来の参考のために、これは私が使用するものです:
export PS1="\[\033[0;31m\][\u@Project:\w]$\[\033[0m\] "
これは私のシェルプロンプトを次のように表示します:
[ec2-user@Project:~]$
ライブサイトと開発サイトを区別するのに役立ちます。