lsをカラー表示


Last Update: 2005/01/04
35157 th Visitor

lsのカラー化

FreeBSDを使っていてたまに他の人が使っているLinuxを見ると、lsの結果が色分けされていてとても羨ましく見えます。
FreeBSDはデフォルトの設定ではlsは白黒でしか表示できませんが、いくつかの方法でlsをカラー表示することが出来ます。

lsをカラー表示する方法は何種類かあります。
手軽に出来るものから順に

の3種類です。
FreeBSDのlsはcolorlsというlsで、標準でカラー表示をサポートしています。
特に気にならない方はcolorlsでカラー化するのが良いかと思います。

私が普段愛用しているのは、Linuxでも使われているgnulsによるカラー表示です。
配色が綺麗なのと細かい設定ができることが使用理由です。

ちなみに一番上のtcshによるカラー化は正確にはls-Fというtcshのコマンドを使うので正確には"ls"のカラー化ではありません。

tcshでカラー表示

tcshのファイル補完候補やls-Fでの表示をカラーにするには、

> set color

とするだけで、カラー表示が可能になります。
これは一時的なものなので、.cshrcにでも書いておくと良いでしょう。
ディレクトリや実行ファイルなどが混在しているディレクトリ(例えば/など)で、

> ls-F

としてみてください。
するとディレクトリ一覧がカラーで表示されたと思います。
これをlsに置き換えたい場合は、

> vi .cshrc

alias ls ls-F
set color

とすれば良いです。

colorlsでカラー表示

FreeBSD標準のlsはcolorlsというlsです。
これはその名の通り、カラー化をサポートしているlsなのでオプションを指定してやることによって簡単にカラー表示させることが可能です。

> ls -G

とGオプションを付けてやることによって、カラー表示されるようになります。
このままカラーでlsを使いたい場合は、

> vi .cshrc

alias ls ls -G

としてやればOKです。

xtermやkterm上でcolorlsでカラー表示

colorlsはコンソール上ではきちんとカラー表示されますが、Xを起動してxtermやktermでls -Gとしてもカラー表示されません。
xtermやkterm上でカラー表示させるには、

setenv TERM kterm-color(またはxterm-color)

を入力してやれば出来るようになりますが、これをXではないコンソール上で実行すると様々な表示がおかしくなって大変なことになってしまいます。
これはコンソールで作業しているときのTERMがcon25となっているんですが、これがkterm-colorなどに変わってしまうがために起こる現象です。

つまり、コンソール上ではTERM con25で、X上ではkterm-colorないしxterm-colorである必要があるのです。

なので.cshrcにsetenv TERM kterm-colorを書くことは非常に危険なので絶対にやめてください。
しかし、この場合はXを起動してからいちいちsetenv〜と入力する必要が出てきますので、コンソール上ではTERM con25で、X上ではkterm-colorないしxterm-colorにうまく設定するようにするスクリプトを.cshrcに書いてやることで解決できます。

> vi .cshrc

if( $TERM == 'kterm' ) then
     setenv TERM kterm-color
else if ( $TERM == 'xterm' ) then
     setenv TERM xterm-color
endif

を.cshrcの適当な場所に記述して、

> source .cshrc

してやれば、Xを起動してktermやxtermを起動しても自動的にls -Gでカラー表示されるようになります。

gnulsでカラー表示

Linuxで使われている、カラー表示可能なlsがgnulsです。
また、gnulsはcolorlsと違い、カラー表示に関するオプションが豊富です。

gnulsは上の2つの方法と違い、ソフト自体が標準でインストールされていません。
ので、インストールします。

> cd /usr/ports/misc/gnuls
# su
# make install clean

# rehash

あるいは、

# su
# portinstall gnuls

インストールが完了したら、適当なディレクトリで

> gnuls --color

としてみてください。
カラー表示されれば成功です。

ただ、この状態だと、

> gnuls --color | less

などと、他のコマンドと組み合わせた時に問題が発生する場合があります。
例えば、gnuls --colorとした時には、

hogehoge

と出る状態でも、gnuls --color | lessとした時に、

ESC[0mESC[01;34mhogehogeESC[0m
ESC[m

と、カラーコードの情報が出てしまいます。
これは、gnuls --colorのオプションにnever、always、autoとあり、それぞれ「カラー表示しない」「常にカラー表示する」「カラー表示を自動判別する」という意味なんですが、何も指定しない状態ではalwaysになっているので、gnuls --color |lessなどとした時でもカラー表示しようとし、結果的にカラーコードが出力されるという現象が起こるのです。
これを回避するには、--colorオプションをautoにしてやれば良いです。

> gnuls --color=auto
> gnuls --color=auto | less

としてやれば、lessなどのコマンドと組み合わせた時などには、自動的にカラー表示されなくなり、カラーコードが出力されなくなります。

上の2つと同じように、lsで使えるようにするには、

> vi .cshrc

alias ls gnuls --color=auto

としてやります。

lessと組み合わせた時にも正常にカラー表示したい場合は、lessに-Rオプションを付ければ解決できます。

> gnuls --color=always | less -R

としてやれば、lessと組み合わせた時にも正常にカラー表示できるようになります。
が、エスケープシーケンスを認識しないコマンドなどと組み合わせた時にはやはりカラーコードの情報が出てしまうことになりますので、あまりお奨めできない事を覚えておいてください。
例えばjmanで日本語マニュアルを開こうとすると表示がおかしい場合がありますが、この場合はPAGERに'jless -R'を指定してやらないと正常に表示されません。

なお、gnulsは標準のままだと日本語ファイルを正常に表示できません。
ある程度は表示できるのですが、たまに化けたりします。
通常のlsの場合jlsで代用できますが、gnulsではオプションを設定してやることによって正常に日本語を表示できるようになります。

> gnuls --show-control-char

としてやれば正常に日本語表示されると思います。

また色設定を変えることも可能です。
これはdircolorsというコマンドと、設定ファイルを使って指定します。

> vi .cshrc

if ( -f ~/.dircolors ) then
   eval `dircolors -c ~/.dircolors`
endif

を、.cshrcに書き加えます。
これは、.dircolorsというファイルがホームディレクトリにある場合は、色設定のファイルとして読み込むというスクリプトです。
dircolors -cの-cはC shell(csh、tcsh)にLS_COLORSをセットするオプションです。

.dircolorsのサンプルを置いておくので、参考にしてください。

.dircolorsのサンプル

また色はISO6429に準拠していますので、

0: デフォルトの色にする
1: 明るくする
4: 下線を引く
5: 点滅させる
7: 反転させる
30: 文字を黒に
31: 文字を赤に
32: 文字を緑に
33: 文字を黄に
34: 文字を青に
35: 文字を紫に
36: 文字をシアンに
37: 文字を白に
40: 背景を黒に
41: 背景を赤に
42: 背景を緑に
43: 背景を黄に
44: 背景を青に
45: 背景を紫に
46: 背景をシアンに
47: 背景を白に

が使用できます。
またこの設定は、tcshのカラー表示でも同様のことが可能です。


設定


もどるにゅ

トップにもどるにゅ