標準出力で文字列を右寄せする方法を調べたからメモ。別にzshに限った話ではないのでbashでも使える。
ウィンドウの幅
右端というキーワードを考えるにあたってポイントとなるのはターミナルウインドウの幅である。ウィンドウ幅は $COLUMNS
という変数に格納されている。 $COLUMNS
はウィンドウの幅に変化があると、自動で書き換わる。
例: 現在のウィンドウ幅を表示する
echo $COLUMNS
ターミナルの右端に文字を出力する方法
printf
コマンドと $COLUMNS
を使用し、文字列をフォーマット(装飾)して出力する。
例: ターミナルの右端に Sucks so much(そびえたつクソ)と表示する
printf "%${COLUMNS}s\n" "Sucks so much"
どうやって装飾するのかは Man page of PRINTF を参照。C言語のマニュアルだがやっていることに変わりはない。
zshのどんな場面で使えるのか?
たとえばzshのプロンプトに情報をかっこよく表示することができる。何も考えずに、zshに下記をコピペして実行する。
precmd() { prompt_l="$(date '+%F %T')" prompt_r="${USER}@$(uname -n)" printf "%s%$((${COLUMNS} - ${#prompt_l}))s\n" "${prompt_l}" "${prompt_r}" }
すると毎回のプロンプト表示に下記のような行が追加されるようになる。
2015-03-14 20:49:35 vorfee@vorfeeMacBookPro.local
もし、味気ないと感じるなら以下の記事の知識を組み合わせることでカラフルにできる。
追記
今回行っているのはprecmd()を使った行の追加で、プロンプトの変更ではない。プロンプトの右端に文字を出力するにはRPROMPT
というパラメータを使用する。
http://zsh.sourceforge.net/Doc/Release/Parameters.html#Parameters-Used-By-The-Shell
参照
http://stackoverflow.com/questions/4239010/right-text-align-bash
更新履歴
2017/01/16 文脈が意味不明だったので文構成を変更。 2017/02/17 追記