Help us understand the problem. What is going on with this article?

水平線を引く

More than 3 years have passed since last update.

こうする:

$ echo "${(r:COLUMNS::-:)}"
-----------------------------------------------------------------------

# 破線みたいになるのが嫌なら
$ print -P '%U${(r:COLUMNS:: :)}%u'
# 下線付きの空白文字が表示される

仕組みと応用

${(r:<文字数>::<繰り返す文字>:)} を zsh が評価すると <文字数> に達するまで <繰り返す文字> を繰り返すように展開する。最初の例では環境変数 COLUMNS を使って、現在の端末の横幅分の文字数を繰り返している。

なのでくり返し文字を 2 文字以上にすることも可能:

$ echo "${(r:33::123456789|:)}"
123456789|123456789|123456789|123
$ echo "${(r:COLUMNS::- - - キリトリ - - - >8 :)}"
- - - キリトリ - - - >8 - - - キリトリ - - - >8 - - - キリトリ - - - >8 - - - キリトリ - - - >8

${(r:<文字数>::<埋める文字>::<文字>)} とすると、<文字> の右側を <埋める文字><文字数> まで埋める:

$ echo "${(r:30::*::foo:)}"
foo***************************

右寄せ左埋めをするときは、r じゃなくて l を使う:

$ echo "${(l:30::-::foo:)}"
---------------------------foo

: 以外の他の記号でも区切れる:

$ echo "${(l.30..-..foo.)}"
---------------------------foo
$ echo "${(l|30||=|)}"
==============================

寄せる文字を変数展開したい時は:

$ echo "${USERNAME}"
kui
$ echo "${(l:30:)USERNAME}"
                           kui
$ echo "${(r.30..#.)USERNAME}"
kui###########################
$ echo "${(r.30..#..---.)USERNAME}"
kui---########################

プロンプトにも使える。例えば、水平線を引きつつ右端に exit ステータスを表示するとき:

Screenshot from 2015-01-15 12:28:58.png

中央寄せするなら、${#<変数名>} で文字列の長さが取れるのを利用して:

$ echo $COLUMNS $SHELL ${#SHELL} $(((COLUMNS+${#SHELL})/2))
80 /bin/zsh 8 44
$ echo ${(l.(COLUMNS+${#SHELL})/2.)SHELL}
                                    /bin/zsh

参考

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away