モノクロなls

ターミナルで使われるコマンドの代表といえばls。なにも設定しなければ図1.1のように表示される。モノクロ悪くはないが、やはり、カラーの方が一目見て概要をつかみやすい。今回はカラー表示についてかいてみよう。

図1.1 なにも設定しなければモノクロな世界 – 渋すぎると言わざるとえない

カラーなls - FreeBSD

lsコマンドの出力をモノクロからカラーに変える方法は、lsコマンドの実装ごとに異なる。FreeBSDのlsコマンドならリスト2.1のように設定すればいい。環境変数LSCOLORSに色を指定して、コマンドの引数に-Gだ。

リスト2.1 FreeBSDでlsをカラー表示

export LSCOLORS=exfxcxdxbxegedabagacad
alias ls="ls -G"

図2.2 FreeBSD lsでカラー表示

環境変数LSCOLORSにおいて指定している文字はそれぞれの色を表している。1つめから順にリスト2.3のように設定されている。指定する色はリスト2.4のように文字に割り当てられているので、このふたつを組み合わせてLSCOLORSを設定すればいい。

リスト2.3 環境変数LSCOLORSの意味

  • 01: ディレクトリ前景色
  • 02: ディレクトリ背景色
  • 03: シンボリックリンク前景色
  • 04: シンボリックリンク背景色
  • 05: ソケットファイル前景色
  • 06: ソケットファイル背景色
  • 07: FIFOファイル前景色
  • 08: FIFOファイル背景色
  • 09: 実行ファイル前景色
  • 10: 実行ファイル背景色
  • 11: ブロックスペシャルファイル前景色
  • 12: ブロックスペシャルファイル背景色
  • 13: キャラクタスペシャルファイル前景色
  • 14: キャラクタスペシャルファイル背景色
  • 15: setuidつき実行ファイル前景色
  • 16: setuidつき実行ファイル背景色
  • 17: setgidつき実行ファイル前景色
  • 18: setgidつき実行ファイル背景色
  • 19: スティッキビットありother書き込み権限つきディレクトリ前景色
  • 20: スティッキビットありother書き込み権限つきディレクトリ背景色
  • 21: スティッキビットなしother書き込み権限つきディレクトリ前景色
  • 22: スティッキビットなしother書き込み権限つきディレクトリ背景色

表2.4 環境変数LSCOLORSで指定する色

  • a: 黒
  • b: 赤
  • c: 緑
  • d: 茶
  • e: 青
  • f: マゼンタ
  • g: シアン
  • h: 白
  • A: 黒(太字)
  • B: 赤(太字)
  • C: 緑(太字)
  • D: 茶(太字)
  • E: 青(太字)
  • F: マゼンタ(太字)
  • G: シアン(太字)
  • H: 白(太字)
  • x: デフォルト色

カラーなls - FSF coreutils

FSFから配布されている基本コマンド群であるcoreutilsの例もあげておく。リスト3.1のように設定すればよく、使用する環境変数はLS_COLORSだ。ここではglsとしているが、coreutilsをシステムベースのコマンド群として採用しているディストリビューションではlsとしてインストールされているので、glsをlsに読みかえてほしい。

リスト3.1 FSF coreutils lsをカラー表示

export LS_COLORS='di=34:ln=35:so=32:pi=33:ex=31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30'
alias gls="gls --color"

図3.2 FSF coreutils lsでカラー表示

環境変数LS_COLORSでは対象と色を=で結びつけて設定する。指定する対象はリスト3.3のように2文字の短縮文字列、色はリスト3.4のような数字で指定する。指定方法や短縮名、色番号はこれ以外のコマンドでも同じものを使うことが多いので、覚えておくといい。

リスト3.3 環境変数LS_COLORSで使う対象のうち代表的なもの

  • di: ディレクトリ
  • ln: シンボリックリンク
  • so: ソケットファイル
  • pi: FIFOファイル
  • ex: 実行ファイル
  • bd: ブロックスペシャルファイル
  • cd: キャラクタスペシャルファイル
  • su: setuidつき実行ファイル
  • sg: setgidつき実行ファイル
  • tw: スティッキビットありother書き込み権限つきディレクトリ
  • ow: スティッキビットなしother書き込み権限つきディレクトリ

リスト3.4 環境変数S_COLORSで指定する色

  • 00: なにもしない
  • 01: 太字化
  • 04: 下線
  • 05: 点滅
  • 07: 前背色反転
  • 08: 表示しない
  • 22: ノーマル化
  • 24: 下線なし
  • 25: 点滅なし
  • 27: 前背色反転なし
  • 30: 黒(前景色)
  • 31: 赤(前景色)
  • 32: 緑(前景色)
  • 33: 茶(前景色)
  • 34: 青(前景色)
  • 35: マゼンタ(前景色)
  • 36: シアン(前景色)
  • 37: 白(前景色)
  • 39: デフォルト(前景色)
  • 40: 黒(背景色)
  • 41: 赤(背景色)
  • 42: 緑(背景色)
  • 43: 茶(背景色)
  • 44: 青(背景色)
  • 45: マゼンタ(背景色)
  • 46: シアン(背景色)
  • 47: 白(背景色)
  • 49: デフォルト(背景色)

カラーなzsh補完候補一覧

やることはまだ残っている。zsh補完候補の一覧表示はなにも設定しなければ図4.1のようにモノクロ表示だ。zshはこの補完候補表示もカラーにする機能を提供している。

図4.1 なにも設定しなければzshの補完候補一覧はモノクロだ – やはり渋いと言わざるをえない

補完候補のカラー表示は補完機能の読み込みとzstyleの設定でおこなう。リスト4.2のように設定すればいい。

リスト4.2 zsh補完候補一覧をカラー表示する方法

autoload -U compinit
compinit

zstyle ':completion:*' list-colors ''

図4.3 zsh補完候補一覧でカラー表示

さて仕上げだ

lsコマンドとzsh補完候補一覧の両方でカラー表示を設定したら、最後に表示される色の整合性をとっておきたい。補完候補一覧とlsコマンドの表示で色が違っているとちょっと混乱する。

リスト5.1 lsコマンドとzsh補完候補の色をそろえる設定

autoload -U compinit
compinit

export LSCOLORS=exfxcxdxbxegedabagacad
export LS_COLORS='di=34:ln=35:so=32:pi=33:ex=31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30'

alias ls="ls -G"
alias gls="gls --color"

zstyle ':completion:*' list-colors 'di=34' 'ln=35' 'so=32' 'ex=31' 'bd=46;34' 'cd=43;34'

図5.2 FreeBSD ls、FSF coreutils ls、zsh補完候補一覧のカラーを統一

もう一歩進んだ設定

だいたい上記設定まですれば上出来だが、ツールにこだわりを見せるzsherとしてはさらに一歩突っ込んだ設定をしておきたい。

これまで紹介した色設定はFreeBSD lsで設定されているデフォルトの色に合わせたものだが、背景色が白のターミナルでは視認値が良いものの、コンソールのように背景色が黒いターミナルでは若干見にくい。カラーテーマを保ったまま、黒いターミナルでも視認値の高い設定をしよう。

リスト6.1 背景が白いターミナル(xterm系)と黒いターミナル(コンソール)で設定を若干変更

case "${TERM}" in
kterm*|xterm*)
    export LSCOLORS=exfxcxdxbxegedabagacad
    export LS_COLORS='di=34:ln=35:so=32:pi=33:ex=31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30'
    zstyle ':completion:*' list-colors 'di=34' 'ln=35' 'so=32' 'ex=31' 'bd=46;34' 'cd=43;34'
    ;;
cons25)
    unset LANG
    export LSCOLORS=ExFxCxdxBxegedabagacad
    export LS_COLORS='di=01;34:ln=01;35:so=01;32:ex=01;31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30'
    zstyle ':completion:*' list-colors 'di=;34;1' 'ln=;35;1' 'so=;32;1' 'ex=31;1' 'bd=46;34' 'cd=43;34'
    ;;
esac

これでウィンドウ環境から活用する場合でも、コンソールから作業する場合でも同じように扱えるというというものだ。