プロンプトで遊ぼう

俺に長文はかけません。

プロンプト用変数

  • プロンプトを変更するには、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