プロンプトで遊ぼう
俺に長文はかけません。
プロンプト用変数
- プロンプトを変更するには、PS1に文字列を代入すればよい。
- 例) PS1='Alternative Prompt # 'でプロンプトとして「Alternative Prompt #」が使われる
- PS1の別名としてprompt、PROMPTが存在する。
- RPS1は、画面の右側に表示される。
- 入力したコマンドとかぶると自動で隠される
- PS2は、入力待ちのときに使われる。例えば、コーテーションが閉じられていない場合。
- PS3はよくわからん。select mechanismで使われるらしい
- PS4はデバッグ用。XTRACEオプションが設定されている場合に使われる
プロンプトエスケープ
- PS1に文字列を代入するだけだと、静的なプロンプトしか使えない
- %をエスケープ文字として使い、実行時に置き換える
- 例)%Tは実行時に現在時刻に置き換えられる
- 例)PS1='%T # 'でプロンプトとして「10:47 # 」が使われる
主なプロンプトエスケープ
時刻に関係するもの。
- %t。現在時刻
- 例) 10:47AM
- %T。現在時刻
- 例) 10:47
- %*。現在時刻
- 例) 10:47:21
- %w。日付
- 例) 日 29
- %W。USフォーマットの日付
- 例) 01/29/06
- %D。インターナショナルフォーマットの日付
- 例) 06-01-29
- %D...:とすると、日付のうち一部が取り出せる。...の部分の構文はstrftimeとほぼ同じ。詳細はzshmiscを参照
ディレクトリ関係
その他
- %#
- スーパーユーザーなら%を使い、それ以外には#に置き換えられる。
制御構文
- %()。三項演算子みたいなの。
- %(numX.true.false)という形で、Xがnumと等しいならtrueが、等しくないならfalseに置き換えられる
- Xは%の後に書かれる文字。
- numを書かないと0が書かれているものと見なす
- %(...)中で、)を使いたい場合は、%)とする必要がある
- 例) %(t.Ding!.%t)。もし時刻が0なら、Ding!に、それ以外なら%tに置き換えられる。
色
- 色を指定する部分は%...%:でくくる必要がある
- 色は、文字列の長さに影響を与えないので
- colorsという関数をつかって、色を変えるためのエスケープ文字を連想配列に代入する
- autoload -U colorsとしたあと、colorsを呼び出す
autoload -U colors colors PS1="%${bg[white]:$fgfg[red]:%} %# "
- 無難な色
- ターミナルごとに対応している色は違う
- cyan,white,yellow,magenta,black,blue,red,grey,green,default
- 文字を太く。
- $fg_boldと$bg_bold