BREAKING NEWS

[4]

Macのターミナルで色つき表示色々



lsの出力やzsh補完候補一覧をカラフルにしましょう。


lsコマンドのカラー出力

まず、lsコマンドには異なる二つの種類がある。
Macに初めから入っているlsコマンドは、BSD系のコマンド。一方、Linuxなどに入っているlsコマンドは、GUN系のコマンド。この二つのコマンドはカラー化する際のオプションや色指定の為の環境変数名が異なります。
系統オプション環境変数
BSD系 (Macの場合)-GLSCOLORS
GNU系 (Linuxの場合)--colorLS_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,16setuid付実行ファイルa,b黒,赤
9組目17,18setgid付実行ファイルa,g黒,シアン
10組目19,20書き込み可能ディレクトリstickybit付a,c黒,緑
11組目21,22書き込み可能ディレクトリstickybitなしa,d黒,ブラウン
そして、文字と色の組み合わせは次の表の通りです。
文字列文字列
aA太字の黒
bB太字の赤
cC太字の緑
dブラウンD太字のブラウン
eE太字の青
fマジェンタF太字のマジェンタ
gシアンG太字のシアン
hライトグレーH太字のライトグレー
xデフォルトの色

以上は、lsのマニュアルに載っているので、ターミナルから次のコマンドを入力してマニュアルを見てみましょう。
% man ls
マニュアルが表示されたら、/LSCOLORS で環境変数LSCOLORSを検索、一回nキーを押せば、該当部分が出てきます。

好きな色に変更したい場合には、上の表とにらめっこしながら、22文字分の設定をする......
若しくは、便利なサイトを活用することも出来ます。
例えば、次のサイトは、Web上で色指定を行うと設定用の文字列を書き出してくれるので、それをコピペするだけで設定完了です。尚、このページは単にjavascriptで動いてるので、ページの右上に記されている通りgithubからクローンしておけばローカルでも使えたりします。
http://geoff.greer.fm/lscolors/

さて、実際のところ、ライトユーザーにとっては、上の11種類のファイルタイプの違いを把握する必要が無いかもしれません。なので、とりあえずは、ホームディレクトリの中でよく見かけるファイルタイプである
  • ディレクトリ
  • シンボリックリンク
  • 実行権限付のファイル
の3つのタイプあたりを見やすい色に設定しておけば良いのではないでしょうか。


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に対応するものを表にまとめてみました。

シンボルファイルの種類デフォルトの値
didirectory32
lnシンボリックリンク36
soソケット33
piパイプ31
ex実行可能ファイル35
bdブロックデバイス44;37
cdキャラクタデバイス44;37
susetuid付実行ファイル37;41
sgsetgid付実行ファイル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のターミナルで色つき表示色々 Macのターミナルで色つき表示色々 Reviewed by syunkichi on 3/18/2015 Rating: 5

No comments:

Sora Templates

Image Link [https://scontent.xx.fbcdn.net/v/t1.0-9/13343039_103147363441877_5912666874811349341_n.jpg?oh=32de40bba33988d454d1a3104dde18ac&oe=57D1E6F4] Author Name [Syunkichi] Author Description [Let's write codes staylishly!!!!!] Twitter Username [webgeek7] Facebook Username [syunkichi.nekota] GPlus Username [114037852049523769954] Pinterest Username [pcgeek91] Instagram Username [s.nekota]