コマンドラインで頻繁に使うコマンドの1つls
ですが、
colorls
というコマンドを使うと
ls
の結果にファイルの種類に応じてアイコンマークを着ける事が出来ます。
- colorlsをインストール
- 実際の表示
- 設定ファイル
- エイリアスについて
load_from_yaml': undefined method
safe_load’ for Psych:Module (NoMethodError)- まとめ
colorlsをインストール
colorls
はRuby製のコマンドラインツールでgem
を使って
$ gem install colorls
とする事でインストールできます。
gem
のディレクトリに正しくPATHが通っていればこれでcolorls
コマンドが使える様になります。
加えて表示するアイコンをインストールする必要があります。
今回はnerd-fontsを入れました。
Mac+Homebrewなら
$ brew cask install caskroom/fonts/font-hack-nerd-font
で入ります。
LinuxやMacでも直接入れる場合はインストールスクリプトを使ってインストールする事も出来ます。
curl
を使って直接持ってくる事もできて
Linux:
$ mkdir -p ~/.local/share/fonts
$ cd ~/.local/share/fonts
$ curl -fLo "Droid Sans Mono for Powerline Nerd Font Complete.otf" https://raw.githubusercontent.com/ryanoasis/nerd-fonts/master/patched-fonts/DroidSansMono/complete/Droid%20Sans%20Mono%20for%20Powerline%20Nerd%20Font%20Complete.otf
Mac:
$ cd ~/Library/Fonts
$ curl -fLo "Droid Sans Mono for Powerline Nerd Font Complete.otf" https://raw.githubusercontent.com/ryanoasis/nerd-fonts/master/patched-fonts/DroidSansMono/complete/Droid%20Sans%20Mono%20for%20Powerline%20Nerd%20Font%20Complete.otf
な感じでインストールします。
後はこのフォントを使える様にターミナルの設定が必要な場合があります。
MacでiTerm2を使っている場合、 Preferences Profiles で使っているプロファイルを選びTextのタブに行くと一番下にUse a different font for non-ASCII textという項目があると思います。
これにチェックを入れるとNon-ASCII FontというASCII以外の文字に関するフォントを選ぶ項目が現れるので ここで先ほどインストールしたKnack Nerd Fontを選択します。
ターミナル.appだと全体のフォントだけが選べるのでそこでKnack Nerd Fontsを選ぶ事も出来ますが iTerm2だときちんと分けて選択出来るので通常のフォントをきちんと選びたい時にはやはりiTerm2が便利。
実際の表示
実際に表示してみた結果はこんな感じ。
ls
と同様に-a
で.
から始まるファイルも表示されます。
-r
を付けるとフォルダの数などのちょっとしたレポートが追記されます。
また、-l
オプションを付けるとls
の様にパーミッションや所有者の情報等
を表示する事が出来ます。
初期設定だと暗いバックグラウンドな環境では
- アイコンのあるファイル: 緑
- アイコンのないファイル: 黄色
- ディレクトリ(アイコン有無関係なく): 青
と言った表示色になっています。
設定ファイル
アイコンはファイルの拡張子、またはディレクトリの場合はディレクトリの名前自体を見て
付けている様ですが、
この関連付けは$(dirname $(gem which colorls))/yaml
にあるYAMLファイルで定義されています。
files.yamlに
...
py: "\ue606"
r: "\uf25d"
rb: "\ue21e"
...
というのがあって左が拡張子で右がフォントの文字コード。 file_aliases.yamlには
...
gemfile: rb
gemspec: rb
guardfile: rb
...
と言った羅列があって左が拡張子、右がfiles.yamlで定義されている拡張子で その設定を同じく使う様にエイリアス定義を行っています。
folders.yamlにはディレクトリ名と文字コード、 folder_aliases.yamlにはディレクトリのエイリアスが定義されています。
これらのファイルに拡張子や文字コードの設定を加えれば 新たなファイルタイプにしたり表示アイコンを変更したりも出来ます。
デフォルトだと.cpp
はアイコンがあてられてますが
.cxx
とか.h
とかは割当がないので.cpp
のエイリアスにしたり。
残りのdark_colors.yamlとlight_colors.yamlは表示の色を定義するファイルです。
dark_colors.yamlでは
# Main Colors
unrecognized_file: yellow
recognized_file: green
dir: blue
こんな設定になってますが、
# Main Colors
unrecognized_file: white
recognized_file: white
dir: yellow
みたいな設定が良いかな、と個人的には。
アイコンの有無で色を変えるのはあまり意味が無いので適当な色に統一。 青は黒バックグラウンドだとちょっと見えにくいので黄色とか他の色にした方が見やすいです。
現在の所、ls
の様にシンボリックリンクや実行可能ファイル、と言った定義で
色を変更することは出来ない様です。
シンボリックリンクに関しては-l
を使えば上にある様に
リンクの有無も確認してくれてDead Linkの表記もしてくれます。
ただしこの場合元ファイルの表記がないのがちょっとわかりにくい所。
エイリアスについて
ちなみにcolorls
のREADMEには
$ alias lc=`colorls -l`
というエイリアス設定が載ってますが、 手元のMacだと Monoという.NET frameworkの 中のコマンドが既にありました。
$ type lc
lc is hashed (/Library/Frameworks/Mono.framework/Versions/Current/Commands/lc)
Caskでmono-mdk
というパッケージをインストールしたっぽいんですが
なんで入れたのか忘れました。
多分問題ないと思いますが何かしら影響があるかもしれないのでlc
をエイリアスする時にはちょっと注意。
load_from_yaml': undefined method
safe_load’ for Psych:Module (NoMethodError)
Homebrewにはgemパッケージも管理できるbrew-gem
という拡張機能があります。
最初、colorls
をこのbrew-gem
を使ってインストールしてみた所
以下の様なエラーが出ました。
/usr/local/Cellar/gem-colorls/0.1.7/gems/colorls-0.1.7/lib/colorls/load_from_yaml.rb:4:in `load_from_yaml': undefined method `safe_load' for Psych:Module (NoMethodError)
from /usr/local/Cellar/gem-colorls/0.1.7/gems/colorls-0.1.7/lib/colorls/flags.rb:52:in `set_color_opts'
from /usr/local/Cellar/gem-colorls/0.1.7/gems/colorls-0.1.7/lib/colorls/flags.rb:5:in `initialize'
from /usr/local/Cellar/gem-colorls/0.1.7/gems/colorls-0.1.7/exe/colorls:4:in `new'
from /usr/local/Cellar/gem-colorls/0.1.7/gems/colorls-0.1.7/exe/colorls:4:in `<top (required)>'
from /usr/local/bin/colorls:5:in `load'
from /usr/local/bin/colorls:5:in `<main>'
colorls
のIssueに
load_from_yaml': undefined method
safe_load’ for Psych:Module · Issue #85 · athityakumar/colorls
と丁度同じエラーのものがありましたが、これに従ってgem update
を行ってみても上手く行きません。
試しに直接gem install colorls
をしてみた所上手く行きました。
brew-gem
でインストールすると、通常のgem
コマンドのときと別の所にインストールされるのですが、
この際にパッケージの依存関係とかは無視してそれだけを入れる様な状態になるみたいです。
なのでbrew-gem
は依存関係が無いようなよほど孤立したものか
もしくは自分で全部確実に依存関係すべてを書ける様な場合にしか使えないです。
上記のIssueでは/Library/Ruby/Gems…というディレクトリなのでbrew-gem
でインストールしたものではないと思いますが、
恐らく複数のgemの管理環境があったりしてパッケージの依存関係がおかしくなってしまっている様な状態だと思います。
まとめ
ls
コマンドは頻繁に使うコマンドなので
それを飾り付け出来るのはなかなか楽しい所だと思います。
ただし、ls
の拡張と言うよりは
アイコンを付けて表示するための別コマンド、という感じがあるので
実用的にはls
を置き換えるというにはまだ難しい感じです。
まあ上に上げた様なことは現在出来ることを見ると 簡単に実装できそうなきもするので そのうち置き換える様に出来るかもしれません。
後は今のところgemの中にある設定ファイルを直接いじる様になってますが HOMEディレクトリとかの個人ファイルを読み込める様にならないとなかなか使い勝手が良くないです。
ただ見た目は結構面白いので人にちょっと見せつけてみるとか。