Macのターミナルで色つき表示色々
lsの出力やzsh補完候補一覧をカラフルにしましょう。
lsコマンドのカラー出力
まず、lsコマンドには異なる二つの種類がある。Macに初めから入っているlsコマンドは、BSD系のコマンド。一方、Linuxなどに入っているlsコマンドは、GUN系のコマンド。この二つのコマンドはカラー化する際のオプションや色指定の為の環境変数名が異なります。
系統 | オプション | 環境変数 |
---|---|---|
BSD系 (Macの場合) | -G | LSCOLORS |
GNU系 (Linuxの場合) | --color | LS_COLORS |
BSD系のlsでの色指定
BSD系の場合、環境変数LSCOLORSに値を設定します。まずは、ターミナルから次の入力をしてみましょう。
% LSCOLORS=exfxcxdxbxegedabagacad一見、暗号チックなわけのわからない文字の羅列に見えますが、ある規則に従った22個の文字で表される配色の設定です。この22個の文字は、2文字づつのペア11組で構成されています。そして、11個の各組は前から順に、色指定の対象を表しています。また、各組のペアは、前の文字がフォアグラウンド色(fg)、後ろの文字がバックグラウンド色(bg)を表しています。次の表が、上記の暗号チックな例の22文字を解読したものです。
位置 | 順番 | 種類 | 文字 | fg,bg |
---|---|---|---|---|
1組目 | 1,2 | ディレクトリ | e,x | 青,デフォ |
2組目 | 3,4 | シンボリックリンク | f,x | マジェンタ,デフォ |
3組目 | 5,6 | ソケット | c,x | 緑,デフォ |
4組目 | 7,8 | パイプ | d,x | ブラウン |
5組目 | 9,10 | 実行可能ファイル | b,x | 赤,デフォ |
6組目 | 11,12 | ブロックデバイス | e,g | 青,シアン |
7組目 | 13,14 | キャラクタデバイス | e,d | 青,ブラウン |
8組目 | 15,16 | setuid付実行ファイル | a,b | 黒,赤 |
9組目 | 17,18 | setgid付実行ファイル | a,g | 黒,シアン |
10組目 | 19,20 | 書き込み可能ディレクトリstickybit付 | a,c | 黒,緑 |
11組目 | 21,22 | 書き込み可能ディレクトリstickybitなし | a,d | 黒,ブラウン |
文字列 | 色 | 文字列 | 色 |
---|---|---|---|
a | 黒 | A | 太字の黒 |
b | 赤 | B | 太字の赤 |
c | 緑 | C | 太字の緑 |
d | ブラウン | D | 太字のブラウン |
e | 青 | E | 太字の青 |
f | マジェンタ | F | 太字のマジェンタ |
g | シアン | G | 太字のシアン |
h | ライトグレー | H | 太字のライトグレー |
x | デフォルトの色 |
以上は、lsのマニュアルに載っているので、ターミナルから次のコマンドを入力してマニュアルを見てみましょう。
% man lsマニュアルが表示されたら、/LSCOLORS で環境変数LSCOLORSを検索、一回nキーを押せば、該当部分が出てきます。
好きな色に変更したい場合には、上の表とにらめっこしながら、22文字分の設定をする......
若しくは、便利なサイトを活用することも出来ます。
例えば、次のサイトは、Web上で色指定を行うと設定用の文字列を書き出してくれるので、それをコピペするだけで設定完了です。尚、このページは単にjavascriptで動いてるので、ページの右上に記されている通りgithubからクローンしておけばローカルでも使えたりします。
http://geoff.greer.fm/lscolors/ |
さて、実際のところ、ライトユーザーにとっては、上の11種類のファイルタイプの違いを把握する必要が無いかもしれません。なので、とりあえずは、ホームディレクトリの中でよく見かけるファイルタイプである
- ディレクトリ
- シンボリックリンク
- 実行権限付のファイル
GNU系のlsでの色指定
GNU系のlsのマニュアル等はデフォルトでMac上にないので、もし、そこらあたりに興味があって詳しく知りたければネットとかで調べなければなりません。簡単なまとめ的なものなら、次のテキストがわりと分かりやすいかもしれません。zsh解説の巷のブログでは、LS_COLORSを設定して、次にメモするlist-colorsスタイルの値に設定する話(${(s.:.)LS_COLORS}とかいう変数展開)があったり、LS_COLORSを設定するためにdircolorsコマンドを導入してとかいう話がよくありますが、めんどくさいし、Macでは、Macっぽくやればよいので、あまり気にしなくても良いと思います。
zshでの補完候補をカラー化
zshのファイル補完時の一覧表示は、デフォルトだとなんとなく味気ないですが、これもlsと同じように色を付けて表示することが出来ます。list-colorsスタイルの基本設定
色をつけるには、zstyleの補完に関するlist-colorsスタイルで設定します。ターミナルから、以下のコマンドを入力してみましょう。% zstyle ':completion:*' list-colors di=34 ln=35 ex=31
これで、ディレクトリ(di)が青、シンボリックリンク(ln)が紫、実行権限付ファイル(ex)が赤で表示されるようになります。とりあえず、この設定をしておけば、上の例で指定しているlsの配色と同じ配色がzshのファイル補完の一覧の場合にも採用されます。
さて、コマンドライン入力をあらためて見ると、スタイルlist-colorsに与える値は「name=value」形式のもの(複数並べられる)であることがわかります。nameの部分が色を付けるターゲットを表す文字列、valueの部分が色等の効果を表す数字になっています。このlist-colorsに与える値の書式については、マニュアルzshmodulesの中の、「THE ZSH/COMPLIST MODULE」の項目に詳しく書かれているので、ターミナルから
% man zshmodules
して、マニュアルが表示されたら、/complist で検索、2回ほどnキーを押せば、該当部分が出てくるはずです。
ターゲットを示すシンボルのうち、先に紹介したLSCOLORSに対応するものを表にまとめてみました。
シンボル | ファイルの種類 | デフォルトの値 |
---|---|---|
di | directory | 32 |
ln | シンボリックリンク | 36 |
so | ソケット | 33 |
pi | パイプ | 31 |
ex | 実行可能ファイル | 35 |
bd | ブロックデバイス | 44;37 |
cd | キャラクタデバイス | 44;37 |
su | setuid付実行ファイル | 37;41 |
sg | setgid付実行ファイル | 30;43 |
tw | 書き込み可能ディレクトリstickybit付 | 30;42 |
ow | 書き込み可能ディレクトリstickybitなし | 30;43 |
値の効果(色等)は次の表の通り。
値 | 属性 |
---|---|
00 | 標準 |
01 | 明るくする |
04 | 下線を引く |
05 | 点滅させる |
値 | 文字色 | 値 | 背景色 |
---|---|---|---|
30 | 黒色文字 | 40 | バックが黒 |
31 | 赤色文字 | 41 | バックが赤 |
32 | 緑色文字 | 42 | バックが緑 |
33 | 黄色文字 | 43 | バックが黄 |
34 | 青色文字 | 44 | バックが青 |
35 | 紫色文字 | 45 | バックが紫 |
36 | 水色文字 | 46 | バックが水 |
37 | 白色文字 | 47 | バックが白 |
先のデフォルト値で示されている通り、値はセミコロンで繋いで効果を重複できます。例えば、「ow=30;42」は、文字を黒色、背景色を黄色にするという意味になります。
list-colorsスタイルのパターンを使う
さて、list-colorsスタイルの値に渡す「name=value」部分の「name」には固定的なシンボルだけでなくて、パターンを使うことも出来ます。例えば、ターミナルから以下の入力をしてみて下さい。% zstyle ':completion:*' list-colors '=*=33'
上で説明してきた、nameの部分、すなわち「di」や「ln」に対応する部分が、「=*」で一つのかたまりです(前のイコールを含んでひと塊)。
つまり「=パターン」という書式で、イコールに続いてパターンを表記します。
上の例である「=*」は、「*(アスタリスク)」の部分がパターンを表しています。そして、アスタリスクは何にでもマッチするパターンなので、上のスタイル指定の意味は、全てのものを赤にするという設定になります。尚、アスタリスクが展開されないようにシングルクオーテーションでクオートしてあげることを忘れてはいけません。
「*(アスタリスク)」は、ワイルドカードとかファイル名展開とかグロッビングと言われるもので、ビギナーでもよく使う
% ls *.c
のアスタリスクと同じです。この例ならば拡張子が.cのファイル名に展開されます。ファイル名展開の基本、*、#、[a-z]等については、とりあえず、以下を参照
http://gihyo.jp/dev/serial/01/zsh-book/0004
もう少しパターンの例を見て、list-colorsスタイルのパターンの書式に親しんでみましょう。
% zstyle ':completion:*' list-colors '=h*=31;47' '=L*=36;47' % cd / % ls [tab]キー押す
一覧表示のhではじまるhomeディレクトリの色とLで始まるLibraryディレクトリの色が指定の通りに変化しているはずです。このようにパターンを使った場合でも当然、list-colorsスタイルに対する値は複数並べることが可能です。但し、注意しなければならないのは、グロッビングが展開されないようにクオートすることと、そのクオートは、値ごとにすることです。
正誤 | 例 |
---|---|
正解 | '=h*=31;47' '=L*=36;47' |
間違い | '=h*=31;47 =L*=36;47' |
ここで、今まではlist-colorsスタイルに渡す「name=value」形式のname部分で、色を変える対象を指定していましたが、コンテキスト側のタグを使って、色を変えることも出来ます。
% zstyle ':completion:*:parameters' list-colors '=*=32'
これは補完対象が環境変数やシェル変数の場合に緑色にする設定です。
つまり、コンテキスト側でだけ制限して、nameのパターン側は「全て」(制限しない)にしています。
% zstyle ':completion:*:commands' list-colors '=*=31'
これは補完対象がコマンドの場合、赤色にする設定。
これも上と同じで、コンテキスト側だけで制限して、それに引っかかるもの全てに色を付けています。
killコマンドの補完一覧をカラー化
最後に、zshでcompinitしていれば、killコマンドの補完を行う場合、プロセスID補完の為の一覧が表示されます。とっても便利ですが、デフォルトだと地味です。これをカラー化すると、次のようにオシャレな感じになります。
ターミナルから次のような感じにzsytleを設定してみましょう。
% zstyle ':completion:*:kill:*' list-colors \ > '=(#b) #([0-9]#)*( *[a-z])*=34=31=33'
コンテキスト側でkillコマンドの場合という指定をしています。
先から話しているlist-colorsスタイルの値である、「name=value」が少し複雑であるので、紐解いてみましょう。
まず、nameに該当する部分が「=(#b) #([0-9]#)*( *[a-z])*」です。そして、valueに当る部分は、今までと違って3つあります。つまり、この例を簡略化してみると、今までと少し違って「name=value0=value1=value2」という形になっています。
さて、nameの部分はイコールで始まっているのでパターンを表していますが、「(#b)」の部分はグロッビングフラグと呼ばれるもののひとつで、それ以降のカッコで囲まれた部分を取り出す働きを指示しています(後方参照とかいう)。
この例ではカッコで囲まれた部分が2つあり、1つめは「([0-9]#)」、2つ目は「( *[a-z])」です。そして、この何番目のカッコの部分でマッチしているかが、上の何番目のvalueを適用するかに対応しています。
value0つまり一番初めのvalueは何れにもマッチしていないデフォルト状態の部分を指定。
そのあと、1番目のカッコはvalue1、2番目のカッコはvalue2と続けていきます。
最後に、色々と試して、お気に入りの配色ができたら.zshrcに書いておきましょう。
.zshrcに書く場合を例示すれば、こんな感じになります。
Macのターミナルで色つき表示色々
Reviewed by shunsk
on
3/18/2015
Rating:
No comments: